万答#6,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 GreatSQL
本文由博客一文多发平台 OpenWrite 发布!
万答#6,MySQL最多只能用到128个逻辑CPU,是真的吗的更多相关文章
- 万答#21,如何查看 MySQL 数据库一段时间内的连接情况
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 查看方式 已知至少有两种方式可以实现 1.开启 general_log 就可以观察到 开启命令 mysql> set ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- 万答#5,binlog解析出来的日志为何无法恢复
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题描述 问题来自一位群友,简单说就是用 mysqlbinlog 工具读取 bi ...
- #万答10:mysqldump 是如何实现一致性备份的
万答10:mysqldump 是如何实现一致性备份的 实验场景 MySQL 8.0.25 InnoDB 实验步骤: 先开启 general_log 观察导出执行过程的变化 set global gen ...
- 万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 背 ...
- 万答17,AWS RDS怎么搭建本地同步库
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 背景说明 AWS RDS 权限受限,使用 mysqldump 的时候无法添加 - ...
- #添加图片,最多只能上传9张.md
#添加图片,最多只能上传9张.md 前端页面: ```javascript <form id="imgForm" enctype="multipart/form-d ...
- 面试题之redis实现限制1小时内每用户Id最多只能登录5次
面试题之redis实现限制1小时内每用户Id最多只能登录5次 /// <summary> /// redis实现限制1小时内每用户Id最多只能登录5次 /// </summary&g ...
- 此集合已经采用方案 http 的地址。此集合中每个方案中最多只能包含一个地址。
错误信息:此集合已经采用方案 http 的地址.此集合中每个方案中最多只能包含一个地址.如果服务承载于 IIS 中,则可以通过将“system.serviceModel/serviceHostingE ...
随机推荐
- Cocos---大作业:简单H5小游戏
Cocos大作业:传统美食分分类 知识点清单: 场景切换,监听时间,碰撞组件及回调,拖动角色移动,分数记录,随机数和定时器,背景音乐控制,资源池控制,预制体,进度条... 源码+q:143144832 ...
- 第6章 字符串(下)——C++字符串
6.5 C++ strings(C++字符串) C风格字符串常见错误:试图去访问数组范围以外的元素:没有使用函数strcpy( )来实现字符串之间的复制:没有使用函数strcmp( )来比较两个字符串 ...
- C语言 - 基础数据结构和算法 - 单向链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- ExtJS 布局-Accordion布局(Accordion layout)
更新记录: 2022年6月2日 开始. 2022年6月3日 发布. 1.说明 accordion(手风琴)布局一次仅显示一个子组件,内置支持 折叠 和 展开.当需要堆叠多个子组件,并每次只显示一次时, ...
- C#.NET中的程序集版本
更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年8月22日. 在Visual Studio中查看程序集版本 在程序运行中获得程序集版本信息 除了在Visual ...
- redis如何实现数据同步
redis如何实现数据同步 两种,1全同步,2部分同步 全备份: 在slave启动时会向master发送sync消息,master收到slave这条消息之后,将启动后台备份进程,备份完成之后,将备份数 ...
- Go写文件的权限 WriteFile(filename, data, 0644)?
本文来自博客园,作者:阿伟的博客,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/go-ioutil-writefile-perm.html 前言 go iouit ...
- fiddle如何使用代理
前言 Fiddle作为抓包工具深受程序员的喜爱,可能在代理方面有些会感觉到迷惑的,可以通过本文的学习来掌握一些基本的知识. Fiddle介绍 Fiddler是位于客户端和服务器端的HTTP代理,也是目 ...
- go: 如何编写一个正确的udp服务端
udp的服务端有一个大坑,即如果收包不及时,在系统缓冲写满后,将大量丢包. 在网上通常的示例中,一般在for循环中执行操作逻辑.这在生产环境将是一个隐患.是的,俺就翻车了. go强大简易的并发能力可以 ...
- python 常用的数据类型
常用的数据类型 整数型 -> int 可以表示正数.负数.0 整数的不同进制的表示方法 十进制->默认的进制,无需特殊表示 二进制->以0b开头 八进制->以0o开头 十六进制 ...