![添加 CPU 会降低 MySQL 5.5 (Debian) 的性能](https://linux22.com/image/622559/%E6%B7%BB%E5%8A%A0%20CPU%20%E4%BC%9A%E9%99%8D%E4%BD%8E%20MySQL%205.5%20(Debian)%20%E7%9A%84%E6%80%A7%E8%83%BD.png)
我即将在 OpenVZ 容器中设置一个数据库服务器 (MySQL),我一直在想应该为其分配多少个 CPU。我决定对其进行基准测试。我比较了两个 OS/MySQL 发行版,并测试了它们在 1、2、3 和 4 个 CPU 下的性能。
第一个软件配置是:
- CentOS 版本 6.5(最终版)
- mysql Ver 14.14 Distrib 5.1.71,适用于 redhat-linux-gnu (x86_64),使用 readline 5.1
第二:
- Debian GNU/Linux 7
- mysql Ver 14.14 Distrib 5.5.31,适用于 debian-linux-gnu (x86_64),使用 readline 6.2
两者都运行在同一个内核上 - 2.6.32-openvz-042stab083.2-amd64 #1 SMP Fri Nov 8 17:59:25 MSK 2013 x86_64 GNU/Linux。
所有软件都是从软件包中安装的,并且开箱即可使用,无需进行任何自定义配置调整。
硬件:6GB RAM,1-4 个 CPU 3.5 GHz。
为了进行基准测试,我使用了 sysbench,场景如下:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --db-driver=mysql --mysql-password=d prepare
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --db-driver=mysql --mysql-password=d --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
在两种情况下,表的引擎都是 InnoDB。
我查看的输出是每秒的交易数量。结果非常稳定 - 误差小于 1%。
对于 CentOS/MySQL5.1 来说,结果很好,符合预期,但对于 Debian/MySQL5.5 来说,结果非常奇怪:
可以看到,Debian 上的 MySQL5.5 无法充分利用多个 CPU。虽然 2 个 CPU 的性能比 1 个 CPU 的性能高,但明显低于 CentOS/MySQL5.1。而且,当我们在 2 个 CPU 的基础上添加更多 CPU 时,性能会下降,这真的很奇怪。
有人能解释一下那里发生了什么吗?为什么我们添加 CPU 后 MySQL 的性能会变差?
答案1
不是为了打破任何人的猜测,但这是一个MySQL 5.5 中的错误。
答案2
好吧,这是一个非常具有引导性的问题,如果你不了解你正在运行的架构的话...但通常在增加 CPU 容量时,总线吞吐量会呈指数级增长,特别是支持多个多核处理器的架构,只需停下来想一想,无论部署了什么总线带宽限制,中断周期都会受到什么影响....在任何性能事件中...了解你的架构要么会限制 I/O 或每周期位数,再次记住多个 CPU 需要多个线程...所以不管你的 FSB 的速度是多少...如果你的硬件只有 64 位,那么物理电气连接将不得不在同一时钟周期内在尽可能多的内核之间共享这个限制...现在停下来想想从 64 位升级到 256 位系统板的积极影响,你可能会在满负荷的情况下获得 3 倍的吞吐量,因为 1 倍将用于线程/维护操作开销..但是在正常操作期间,当你只需要一个处理器/操作员时,你可能会遇到一个不舒服的开销现实..我想这是一种平衡行为,或者更具体地说,是适合正确路线的正确马匹.. Steveo里多[电子邮件保护]
答案3
当您添加 CPU 时,该程序将并行执行更多操作。如果您没有增加 RAM 数量,则可能会发生交换,特别是如果您使用正在测试的软件的较大版本(更新通常意味着较大版本)。