【図解】RDS MySQL CPU使用率急上昇!デッドロック判別フローとSQL修正ガイド

MySQL

この記事で解決すること
「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)を探すことから始めてください。


参考資料

コメント

タイトルとURLをコピーしました