《葉問》36期,MySQL最多隻能用到128個邏輯CPU,是真的嗎

本文首發於  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
$ 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個線程
$ 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 MySQL :)


文章推薦:



掃碼加入GreatSQL/MGR交流QQ羣



點擊文末“閱讀原文”直達老葉專欄

本文分享自微信公衆號 - 老葉茶館(iMySQL_WX)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章