GreatSQL社区

搜索

MySQL最多只能用到128个逻辑CPU,是真的吗?

323 1 2022-8-17 17:37
江湖传言MySQL最多只能用到128个逻辑CPU,是真的吗?
全部回复(1)
GreatSQL万答 2022-8-17 17:43:58
本帖最后由 GreatSQL万答 于 2022-8-17 17:45 编辑

在早期以MyISAM引擎为主的年代,的确有类似的限制。MyISAM存在众多限制,这个也是众所周知的,不赘述了。
但自从InnoDB成为MySQL默认引擎后,这个情况应该是不复存在了。尤其是自从MySQL引入innodb_autoinc_lock_mode、innodb_io_capacity、innodb_read_io_threads、innodb_write_io_threads等多个可控参数选项后,对于高并发的业务场景,基本上都能把所有逻辑CPU跑满。
口说无凭,直接测试验证下吧。
测试环境:

  1. #查看CPU,共有176个逻辑CPU
  2. $ lscpu
  3. Architecture:          x86_64
  4. CPU op-mode(s):        32-bit, 64-bit
  5. Byte Order:            Little Endian
  6. CPU(s):                176
  7. On-line CPU(s) list:   0-175
  8. Thread(s) per core:    2
  9. Core(s) per socket:    22
  10. Socket(s):             4
  11. ...

  12. #OS环境
  13. $ cat /etc/redhat-release
  14. CentOS Linux release 7.8.2003 (Core)
  15. $ uname -a
  16. Linux3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
复制代码
下载MySQL 5.5.62版本的二进制包,修改下面几个参数选项:
  1. innodb_io_capacity = 20000
  2. innodb_autoinc_lock_mode = 2
  3. innodb_read_io_threads = 16
  4. innodb_write_io_threads = 16
  5. innodb_thread_concurrency = 0
复制代码
实例启动后,在另外的客户机上运行sysbench进行压测(sysbench不要和MySQL服务器跑在同一个服务器上):
#128个测试表,每个表10万行记录,并发256个线程

  1. #128个测试表,每个表10万行记录,并发256个线程
  2. $ sysbench /usr/share/sysbench/oltp_read_write.lua  --mysql-host=172.16.10.10 --mysql-port=3306 --mysql-user=xx --mysql-password=xx --mysql-db=sbtest  --db-driver=mysql  --tables=128  --table_size=100000 --threads=256 --report-interval=1 --db-ps-mode=disable --time=0 run
复制代码
而后运行htop观察所有CPU的状态,肉眼即可见所有逻辑CPU上都有负载:
640.png
P.S,MySQL 5.1版本中的并发度确实有限,不建议使用该版本,不过现在用5.1的应该很少了吧。
最后,借用微信朋友圈一位同学的留言:talk is cheap, show your test。

GreatSQL万答

22

主题

0

博客

73

贡献

版主

Rank: 7Rank: 7Rank: 7

积分
117

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-5-3 01:03 , Processed in 0.018417 second(s), 13 queries , Redis On.
快速回复 返回顶部 返回列表