优化innoDB,但我的插入相互等待


Optimizing innoDB but my inserts wait for each other

我真的是MySQL的新手,刚刚开始在我的VPS上使用InnoDB表引擎。

服务器信息:4 x 2.4 ghz,8 Gb内存,120gb Raid10。

My.cfg:

[mysqld]
innodb_file_per_table=1
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=2

要插入的表有6个int和1个日期以及1个用于映射的触发器->为映射表中的每一行插入1行。

最后一行有助于加快插入速度(数据库的插入/更新率为80%,读取率为20%)。

但当我做一些测试时,我在网络浏览器中调用一个PHP文件,它将进行10000次插入,大约需要3秒(对于这个硬件来说,这是快还是慢?)。但当我打开多个选项卡并同时打开PHP文件时,它们都有3秒的执行时间,但它们正在等待对方完成:/

有什么想法我应该添加哪些设置吗?或者我应该为更快的插入添加其他设置,非常感谢!

3300插入一秒钟是相当可观的,尤其是使用触发器。如果不了解表格,很难了解更多关于这方面的信息。

你对提交做了什么?你是否完成了所有10公里的插入,然后提交一次?如果是这样,执行类似任务的其他客户端可能会被锁定,直到每个客户端都运行为止。这是一个功能!

另一方面,如果你使用的是自动提交,那么你的MySQL服务器就会流失。

最好的策略是插入大约100或500行的块,然后提交。

您应该尝试解决这种锁定,而不是通过配置设置,而是通过调整您的web php应用程序来仔细管理事务。

如果此应用程序不需要健壮的事务语义,您可能需要考虑使用MyISAM表。MyISAM可以更快地处理大量插入。也就是说,如果您不特别关心是否读取了当前或几秒钟前的数据,那么MyISAM将为您提供良好的服务。