一般死鎖都是不同業務之間AB, BA 加鎖順序不同導致死鎖. 今天遇到同一個業務死鎖
找到導致死鎖的代碼, 大概是:
insert into XXX
update XXX where YYY_id = 1;
XXX表只有一個主鍵索引id
insert 語句對id索引加行鎖
update語句全表加鎖
如果兩個業務同時運行, 兩個業務行鎖都成功, 但是加全表鎖的時候會失敗, 然後強制死掉一個, 另外一個會成功
解決辦法:
YYY_id 加上索引
一般死鎖都是不同業務之間AB, BA 加鎖順序不同導致死鎖. 今天遇到同一個業務死鎖
找到導致死鎖的代碼, 大概是:
insert into XXX
update XXX where YYY_id = 1;
XXX表只有一個主鍵索引id
insert 語句對id索引加行鎖
update語句全表加鎖
如果兩個業務同時運行, 兩個業務行鎖都成功, 但是加全表鎖的時候會失敗, 然後強制死掉一個, 另外一個會成功
解決辦法:
YYY_id 加上索引