2012-04-17 81 views
1

我正在使用Mysql中真正的大数据。其中一个表包含大约400万行不断更新查询的行。Mysql锁定等待超时错误

此更新查询顺利执行,直到一段时间后,但随着行增加,它给我带来了锁等待超时错误的严重问题。

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

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

+0

什么样的更新针对您的表运行?它是单行更新还是随机数更新?你有什么指数在你的桌子上?请提供表格模式 – 2012-04-17 08:35:53

+0

它是一行更新查询,下面是查询下面给出的超时错误 UPDATE'用户'设置'total_received_credits' = 2.0,'credit_amount' = 2.0,'updated_at' ='2012 -04-17 16:39:50'WHERE'users'.'id' = 51016 此查询发生在cron作业的帮助下,并且同一个表上同时发生数千个查询。 – Pankaj 2012-04-17 11:11:57

回答

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) 
相关问题