GreatSQL万答 发表于 2022-8-17 17:37:02

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

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

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跑满。
口说无凭,直接测试验证下吧。
测试环境:
#查看CPU,共有176个逻辑CPU
$ lscpu
Architecture:          x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                176
On-line CPU(s) list:   0-175
Thread(s) per core:    2
Core(s) per socket:    22
Socket(s):             4
...

#OS环境
$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
$ uname -a
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版本的二进制包,修改下面几个参数选项:
innodb_io_capacity = 20000
innodb_autoinc_lock_mode = 2
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_thread_concurrency = 0实例启动后,在另外的客户机上运行sysbench进行压测(sysbench不要和MySQL服务器跑在同一个服务器上):
#128个测试表,每个表10万行记录,并发256个线程
#128个测试表,每个表10万行记录,并发256个线程
$ 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上都有负载:

P.S,MySQL 5.1版本中的并发度确实有限,不建议使用该版本,不过现在用5.1的应该很少了吧。
最后,借用微信朋友圈一位同学的留言:talk is cheap, show your test。

页: [1]
查看完整版本: MySQL最多只能用到128个逻辑CPU,是真的吗?