この記事で解決すること
「RDSのCPUが跳ね上がった!」という緊急時に、それがデッドロック原因かどうかを5分で判別し、具体的にどうSQLを修正すべきかを図解で理解できます。
1. 【5分で判別】CPU急上昇の原因切り分けフロー
CPU使用率が高い原因はデッドロックだけではありません。まずはこのフローで「今起きていること」を特定しましょう。

2. デッドロックの正体(循環待ち)
デッドロックとは、2つの処理がお互いの持つ鍵(ロック)を奪い合って停止する状態です。

3. 証拠を掴む:INNODB STATUS の読み方
SHOW ENGINE INNODB STATUS\G を実行し、以下の構成で犯人のクエリを特定します。

4. 【ゴール】SQLの修正パターン
デッドロックを解消するための具体的な修正Before/Afterです。
パターンA:ロック順序のバラバラ(最頻出)
同じテーブルにアクセスする順番を全クエリで統一します。

パターンB:インデックス不足による広範囲ロック
インデックスを貼ることで、ロックの対象を「テーブル全体」から「特定の1行」に絞り込みます。

5. 再発防止チェックリスト
| 対策項目 | なぜやるのか |
|---|---|
| ロック順序の統一 | 循環待ちを物理的に発生させないため |
| トランザクションを短く | ロックを保持する時間を最小化するため |
| 適切なインデックス | 不要な行(隙間)をロックさせないため |
| アプリ側リトライ | デッドロックは0にはできないため、起きた時に逃がす |
まとめ:CPUが跳ねたら「まず図解フロー」を!
デッドロックは複雑に見えますが、「誰が何を持っていて、何に待たされているか」を図解で整理すれば、必ず解決できます。まずはPerformance Insightsを開き、オレンジ色の波(Lock)を探すことから始めてください。
参考資料


コメント