MySQL 删除某些列时出现死锁
MySQL deadlocking when deleting by certain columns
我有一个 table 包含以下列
document_uuid, driver_uuid, vehicle_uuid, etc
document_uuid
是主键并且始终是唯一的。
driver_uuid
是必填字段,并不总是唯一的。
vehicle_uuid
是可选字段。
我们不断地向这个 table 删除和添加行。删除是 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']
问题是 vehicle_uuid 字段缺少索引。
没有索引,数据库引擎必须抓取更多的行来识别要删除的行,从而导致死锁的可能性更高。
添加索引解决了问题。
我有一个 table 包含以下列
document_uuid, driver_uuid, vehicle_uuid, etc
document_uuid
是主键并且始终是唯一的。
driver_uuid
是必填字段,并不总是唯一的。
vehicle_uuid
是可选字段。
我们不断地向这个 table 删除和添加行。删除是 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']
问题是 vehicle_uuid 字段缺少索引。
没有索引,数据库引擎必须抓取更多的行来识别要删除的行,从而导致死锁的可能性更高。
添加索引解决了问题。