我正要在OpenVZ容器中设置一个数据库服务器(MySQL),我想知道应该为它分配多less个CPU。 我决定以此为基准。 我比较了两个OS / MySQL发行版,并testing了它们如何使用1,2,3和4个CPU来执行。
第一个软件configuration是:
第二:
两者都在同一个内核上运行 – 2.6.32-openvz-042stab083.2-amd64#1 SMP Fri Nov 8 17:59:25 MSK 2013 x86_64 GNU / Linux。
所有的软件都是从软件包中安装的,并且不需要任何自定义configuration就可以直接使用。
硬件:6GB RAM,1-4个CPU 3.5 GHz。
对于基准testing,我使用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高,但明显低于CentOS / MySQL5.1。 而且,当我们在2的顶部添加更多的CPU时,它会变得很奇怪。
有人可以解释那里发生了什么? 为什么在我们添加CPU的时候MySQL会更糟?
不要破坏任何人的猜测,但这是MySQL 5.5中的一个错误 。
那么它是一个真正的领先的问题,而不是第一次了解你正在运行的体系结构的东西..但是当增加CPU容量,特别是支持多个多核处理器的体系结构时,总体上总线吞吐量会成倍增长,只需停下来思考片刻对任何总线带宽限制的中断周期的影响…在任何情况下,性能…了解到,你的架构将瓶颈I / O或位周期,再次记住,多个CPU需要多个线程..所以不pipe你的FSB的速度…如果你的硬件只有64位,那么物理电气连接将不得不在同一个时钟周期的多个内核中分享这个限制…现在停下来想一想从64位系统板升级到256位系统板所带来的积极影响,您可能会获得全面倾斜的x3倍的吞吐量,因为x1将用于穿线/维护歌剧 但是在正常的操作过程中,当你只需要一个处理器/操作员时,你可能会经历一个不愉快的现实情况。我想它是一个平衡的行为,或者更确切地说是适合正确的道路的马。Steveo Reedo nextfriend @ live.co.uk
当你添加CPU时,这个东西将并行执行更多的操作。 如果你没有增加内存的数量,那么可能会发生交换,特别是如果你使用一个更胖的(更新的更主要是更胖)版本的软件,你正在testing。