江湖傳言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源創計劃”,歡迎正在閱讀的你也加入,一起分享。