避免線上使用者表中MySQL死鎖
出現「嘗試取得鎖定時發現死鎖;嘗試重新啟動交易」錯誤可能是一個令人沮喪的問題。當多個事務嘗試以衝突的順序取得資源鎖時,就會出現這種死鎖。要解決此問題,請考慮以下解決方案:
排序操作
由於嘗試以不同順序鎖定鍵的操作,經常會發生死鎖。透過對查詢進行對應排序,建立一致的鎖定鍵順序。例如,如果您有多個查詢同時鎖定 key(1) 和 key(2),請確保它們始終以相同的順序取得鎖定。
順序刪除查詢
您的 DELETE 查詢也應該修改為按升序運行。以下最佳化查詢將實現此目的:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime < NOW() - INTERVAL 900 SECOND ORDER BY id ) u;
自動客戶端重試
MySQL 文件建議客戶端自動重試死鎖。在您的客戶端程式碼中實作此邏輯,在放棄之前設定特定的重試次數(例如 3)。
以上是如何有效避免MySQL線上用戶表死鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!