乍一看,您的代码似乎没有任何问题会导致这样的性能问题。有了这么多的数据,在正常的硬件/操作系统行为下,我希望代码能在几秒钟内运行。我建议检查两个可能的痛点:
-
生成要插入的数据的速度有多快?(将代码的插入部分替换为NOOP)
-
如果在步骤1中确定数据生成足够快,则问题在于数据库的写性能。
无论如何,很可能必须在数据库服务器级别进行故障排除-运行SHOW PROCESSLIST启动,然后在使用INNODB时显示ENGINE INNODB STATUS,如果所有其他操作都失败,则使用gdb获取mysqld进程的stacktrace快照。
可能的罪魁祸首是服务器的I/O子系统出现了可怕的错误,或者启用了某种形式的同步复制,但是如果没有服务器级的诊断,很难确定。