我的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
和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?