Mysql锁等待超时错误

时间:2012-04-17 08:32:03

标签: mysql ruby-on-rails-3

我正在处理Mysql中真正重要的数据。其中一个表包含大约400万行,不断更新查询。

此更新查询正在顺利执行,直到某些时间回来,但随着行的增加,它给出了严重的锁定等待超时错误问题。

我搜索了它的解决方案,我得到的唯一解决方案是增加innodb_lock_wait_timeout,但我读到了某个地方,这实际上是解决该错误的不良选择。

任何人都可以帮助我如何解决这个问题而不增加innodb_lock_wait_timeout,我正在寻找其他解决方案,因为增加变量time_out会增加整个数据库,但我想增加交易时间一张表有这么多记录。

1 个答案:

答案 0 :(得分:0)

“此查询在cron作业的帮助下发生,数千个查询同时在同一个表上发生”

这就是问题所在。 cron工作是犯罪方而不是mysql。我想你最近已经到了临界点。您需要将数据组合成较少数量的查询。大致如下:

INSERT INTO users
(userid, total_received_credits, credit_amount, credit_amount) , 
values(51016 , 2.0, 2.0,  '2012-04-17 16:39:50'), 
(44016 , 3.0, 3.0,  '2012-04-17 16:39:50'), 
(11116 , 2.0, 2.0,  '2012-04-17 16:39:50') 
ON DUPLICATE KEY update total_received_credits = VALUES(total_received_credits) , 
total_received_credits = VALUES(total_received_credits), 
total_received_credits = VALUES(total_received_credits), 
credit_amount = VALUES(credit_amount)