我正在数据库中运行一些更新查询,这些查询会批量更新记录,并且会更新每一行。在某些时候,我看到MySQL连接队列已满,并且不再允许与MySQL建立连接。这意味着某些客户端连接已锁定行,而另一个连接正在尝试更新同一记录并等待锁被删除,从而连接堆积起来。
我无法确定哪些查询正在执行此操作,因为这是在瞬间发生的,我希望通过show full processlist
或其他方法查看数据库中发生了什么。
除了在应用程序中更新一些耗时的逻辑之外,这里真的没有想法。真的需要一些指点:(
答案 0 :(得分:0)
从MySQL slow log开始。将阈值设置为1-2秒,然后检查文件。要记录所有查询,请将其设置为0.看起来像这样,因此您将能够找到锁定时间较长的查询:
# Time: ...
# User@Host: ...
# Query_time: 160.552078 Lock_time: 0.038823 Rows_sent: 2318 Rows_examined: 2421376
SELECT ...