我测试MySQL时TPS的瓶颈是什么?

时间:2018-05-31 07:08:56

标签: mysql multithreading

我的MySQL表是这样的: CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `addr1` varchar(60) NOT NULL, `addr2` varchar(60) NOT NULL, `city` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=966602 DEFAULT CHARSET=utf8

  • MySQL信息

和id,主键,范围从1到966601.我想使用多线程和多链接来测试MySQL的瓶颈tps,而sql是“SELECT * FROM address WHERE id = rand” ,rand的范围是1到966601。

  • 硬信息:

MySQL在另一台PC上,网络是100M,而我ping时的延迟是0.4ms。 MySQL中的数据是机械硬盘。 CPU有12个虚拟内核。内存为8GB。

  • 开始测试:

好的,我准备测试MySQL,当我只使用一个线程和一个链接时,TPS只有1318,CPU使用率(12个虚拟核心总数)只有2%。我使用2个线程和2个链接来测试MySQL,结果是TPS是2670而CPU是4%,所有都是一个线程的两倍。我继续增加线程数,当线程和链接数为10时,TPS为14000,CPU为15%;当线程和链接数为20时,TPS达到顶部:18000,CPU为23%。当我设置线程和链接号为30时,TPS不会增加,CPU使用率也不会增加。

  • 为什么?

所以当我使用多线程和链接以及SQL,“select * from address where = rand”来测试我的MySQL时,我想知道TPS的瓶颈是什么,并且CPU使用率不能达到100%。这种现象背后的原因是什么?是网络延迟,磁盘IO,客户端上的线程调度,服务器上的线程调度还是MySQL?

0 个答案:

没有答案