如何正确错开数千个插入以便不锁定表格?

时间:2015-10-07 21:53:40

标签: mysql locking

我有一台服务器,可以接收来自全球数千个地点的数据。该服务器定期连接到我的数据库服务器并插入多插入记录,每次多次插入大约11,000行,最多插入6个插入语句。发生这种情况时,所有6个进程都会锁定要插入的表。

我想弄清楚是什么导致锁定?我最好不要限制我的多插入,一次说100行,然后端到端做?我将如何使用指南?

数据库服务器有100GB RAM和12个处理器。它的使用非常轻松,但是当这些插入物进入时,每个人都会冻结几分钟,这会扰乱人们的运行报告等。

感谢您的任何建议。我知道我需要错开插入,我只是问一下建议的方法是什么。

更新:我错了。我和程序员谈过,他说有一个运行的perl程序会尽可能快地向服务器发送单个插件。不是多插入。 (目前)有6个perl进程同时运行。其中一个是一次做一个91000插件。也许既然我们有很多RAM,那么多插入会更好吗?

1 个答案:

答案 0 :(得分:2)

您的问题缺乏关于系统结构的一系列细节。此外,如果您在具有100 GB RAM的服务器上运行数据库,则应该可以访问专业DBA,而不是依赖Internet论坛。

但是,正如lad2025在评论中建议的那样,临时表可能会解决您的问题。您的锁定可能是由索引引起的,也可能是由触发引起的。建议是将数据加载到临时表中。然后,悠闲地将登台表中的数据加载到最终表格中。

一种可能性是做11,000次插入,比如说每秒一次(这需要大约3个小时)。虽然执行插入操作会有更多开销,但每个都是自己的事务,锁定时间非常短。

当然,一次只插入1条记录可能不是最佳的。也许10或100甚至1000就足够了。您可以使用事件调度程序管理插入。

并且,这假设锁定根据输入数据的音量进行缩放。这是一个假设,但在没有其他信息的情况下,我认为这是一个合理的假设。