MySQL: Deadlock found when trying to get lock
MySQLデッドロックエラーの解決方法
概要
2つ以上のトランザクションが互いにロックを待ち、進行できない状態です。
エラーメッセージ
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
原因
- ロック順序の不一致: トランザクション間で異なる順序でロック
- 長時間トランザクション: ロック保持時間が長い
- ギャップロック: InnoDB特有のロック
- インデックス不足: テーブルスキャンによる広範囲ロック
解決策
1. 一貫したロック順序
| |
2. リトライロジック
| |
3. トランザクション分離レベル
| |
4. デッドロック情報確認
| |
よくある間違い
- 不要なFOR UPDATEの使用
- トランザクション内での外部API呼び出し
MySQL の他のエラー
この記事は役に立ちましたか?