• GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。
江湖传言MySQL最多只能用到128个逻辑CPU,是真的吗?

共事从客户现场回来,冤屈巴巴的说,某PG服务商通知客户“MySQL最高只能反对128个逻辑CPU,更多就用不上了,还是用PG吧”。

作为从MySQL 3.23时代就开始一路陪跑过来的我,必定不能忍啊。。。

在晚期以MyISAM引擎为主的年代,确实有相似的限度。MyISAM存在泛滥限度,这个也是家喻户晓的,不赘述了。

但自从InnoDB成为MySQL默认引擎后,这个状况应该是不复存在了。尤其是自从MySQL引入innodb_autoinc_lock_mode、innodb_io_capacity、innodb_read_io_threads、innodb_write_io_threads等多个可控参数选项后,对于高并发的业务场景,基本上都能把所有逻辑CPU跑满。

口说无凭,间接测试验证下吧。

测试环境:

#查看CPU,共有176个逻辑CPU$ lscpuArchitecture:          x86_64CPU op-mode(s):        32-bit, 64-bitByte Order:            Little EndianCPU(s):                176On-line CPU(s) list:   0-175Thread(s) per core:    2Core(s) per socket:    22Socket(s):             4...#OS环境$ cat /etc/redhat-releaseCentOS Linux release 7.8.2003 (Core)$ uname -aLinux3.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 = 20000innodb_autoinc_lock_mode = 2innodb_read_io_threads = 16innodb_write_io_threads = 16innodb_thread_concurrency = 0

实例启动后,在另外的客户机上运行sysbench进行压测(sysbench不要和MySQL服务器跑在同一个服务器上):

#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。

Enjoy GreatSQL :)

本文由博客一文多发平台 OpenWrite 公布!