2017-03-17 85 views
0

删除时,我有一个表有以下的列MySQL的死锁某些列

document_uuid, driver_uuid, vehicle_uuid, etc 

document_uuid是主键,并始终是唯一的。
driver_uuid是必填字段,并不总是唯一的。
vehicle_uuid是一个可选字段。

我们不断删除和添加行到这个表。删除是由driver_uuid或document_uuid。

今天我添加了一些代码,以偶尔删除vehicle_uuid以及部署开始导致mysql死锁。

僵局异常不会表现出过多的信息:

'Deadlock found when trying to get lock; try restarting transaction') [SQL: u'DELETE FROM documents_rich_context WHERE vehicle_uuid = %s'] 

回答

0

的问题是缺乏对vehicle_uuid领域的指标。

如果没有索引,数据库引擎必须获取更多行来识别要删除的行,从而导致死锁的可能性更高。

添加索引解决了问题。