デッドロック分析機能は、ApsaraDB RDS for MySQL インスタンス上で発生するロック関連の問題を特定・解決するための支援を行います。直近で発生したデッドロックの調査、時間経過に伴うデッドロック傾向のモニタリング、および現在のセッションにおけるライブメタデータロックやトランザクションブロッキングの診断にご活用ください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
以下の MySQL バージョンおよびエディションで実行中の RDS インスタンス:
RDS High-availability Edition、RDS Enterprise Edition、または RDS Cluster Edition で実行中の MySQL 8.0、RDS Enterprise Edition、
RDS High-availability Edition、RDS Enterprise Edition、または RDS Cluster Edition で実行中の MySQL 5.7、RDS Enterprise Edition、
RDS High-availability Edition で実行中の MySQL 5.6
RDS High-availability Edition で実行中の MySQL 5.5
RDS Basic Edition インスタンスはこの機能をサポートしていません。インスタンスのバージョンとエディションを確認するには、ApsaraDB RDS コンソールの [基本情報] ページに移動し、[タイプとエディション]、RDS Enterprise Edition、および [データベースエンジン] フィールドを確認してください。
ご使用予定の分析タイプに対応する必須パラメーターが設定済みであること。詳細については、「必須パラメーター」をご参照ください。
仕組み
デッドロック分析機能には、3 つのサブ機能があります。ご利用のシナリオに応じて選択してください。
| サブ機能 | 使用タイミング | データソース |
|---|---|---|
| 直近のデッドロック分析 | デッドロックが発生しました。直ちに調査する必要があります。 | 最新のデッドロックログ: SHOW ENGINE INNODB STATUS |
| 包括的デッドロック分析 | デッドロックの傾向をモニタリングしたり、指定した期間内での再発デッドロックを調査したい場合 | 定期的な間隔で解析されるエラーログ |
| その他のデッドロック分析 | 現在のセッションにおけるライブメタデータロックやトランザクションブロッキングを診断する必要がある場合 | information_schema および performance_schema |
包括的デッドロック分析 および その他のデッドロック分析 を利用するには、Database Autonomy Service (DAS) Cost-efficient Edition または DAS Enterprise Edition の有効化が必要です。これらのエディションは一部のリージョンでのみ提供されています。対応リージョンについては、「対応データベースおよびリージョン」をご参照ください。DAS エディションを有効化する手順については、「DAS Cost-efficient Edition および DAS Enterprise Edition の有効化」をご参照ください。
直近のデッドロック分析
DAS は、SHOW ENGINE INNODB STATUS の出力から取得した最新のデッドロックログを分析します。複数のデッドロックが発生している場合、最も最近発生した 1 件のみが分析対象となります。このサブ機能は、インシデント発生直後の即時調査に適しています。
包括的デッドロック分析
DAS は、定期的な間隔でエラーログを解析し、デッドロック情報を抽出します。このサブ機能を用いることで、指定した期間内のデッドロック傾向を確認したり、各デッドロックの詳細を掘り下げたりできます。これは、問題が拡大する前にパターンや再発事象を特定するのに有効です。
その他のデッドロック分析
DAS は、ご利用の RDS インスタンスの現在のセッションをリアルタイムで分析します。
メタデータロック分析:
information_schema.processlistのデータに基づき、ロック待ち関係を推定し、ダイアグラムを生成します。トランザクションブロッキング分析:
information_schema.processlistおよびinformation_schema.innodb_trxのデータに基づき、トランザクションブロッキング関係を分析し、ダイアグラムを生成します。MySQL 5.6 および 5.7:
information_schema.innodb_lock_waitsを使用MySQL 8.0:
performance_schema.data_lock_waitsを使用
必須パラメーター
各サブ機能を使用する前に、必須パラメーターを設定します。インスタンスパラメーターを変更するには、「インスタンスパラメーターの変更」をご参照ください。
| サブ機能 | 必須パラメーター |
|---|---|
| 直近のデッドロック分析 | innodb_deadlock_detect |
| 包括的デッドロック分析 | innodb_deadlock_detect を有効化;innodb_print_all_deadlocks を有効化;log_error_verbosity を 3 |
| トランザクションブロッキング分析(その他のデッドロック分析、MySQL 8.0 専用) | performance_schema |
制限事項
デッドロック分析機能では、以下のメッセージを含むデッドロックを分析できません。
TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTIONデッドロック分析の実行
インスタンス ページに移動します。上部のナビゲーションバーから、ご利用の RDS インスタンスが配置されているリージョンを選択します。該当インスタンスを見つけ、その ID をクリックします。
左側のナビゲーションウィンドウで、自律サービス > 診断 を選択します。
[デッドロック分析] タブをクリックします。
左上隅の[診断]をクリックします。
生成されたデッドロックエントリを見つけ、[詳細の表示] を [詳細] 列でクリックします。
[ロック分析] ページで、ご使用のシナリオに基づいて分析タイプを選択します:
直近のデッドロック分析 — 直近で発生したデッドロックの調査
[最近のデッドロック分析] タブで、[分析タスクの作成] をクリックします。DAS は、
SHOW ENGINE INNODB STATUSから最新のデッドロックログを分析します。結果をフィルターするための期間を指定します。
タスクを見つけ、[詳細の表示] を [詳細] 列でクリックして、完全な診断結果を表示します。
包括的デッドロック分析 — 指定期間内のデッドロック傾向のモニタリング包括的デッドロック分析 タブで、デッドロック傾向および各デッドロックの詳細を確認するための期間を指定します。
その他のデッドロック分析 — ライブメタデータロックまたはトランザクションブロッキングの診断
[その他のデッドロック分析] タブで、[分析タスクの作成] をクリックします。DAS は、
information_schemaおよびperformance_schemaから、実行中のメタデータロックとトランザクションブロッキングを分析します。結果をフィルターするための期間を指定します。
結果の左側にある
アイコンをクリックして、統計情報を表示します。「[詳細を表示]」を「[操作]」列でクリックして、デッドロック分析ダイアグラムを開きます。セッションにマウスを合わせるとロック待ちダイアグラムが表示され、セッションをクリックするとその詳細を表示できます。
次のステップ
デッドロック分析を実行した後は、分析結果から得られたスレッド ID を用いて、「SQL Explorer および監査」ページで関連するトランザクションを調査してください。これにより、根本原因のトレースが可能になります。例えば、行をロックして後続のセッションを LOCK WAIT 状態に陥れさせた長時間トランザクションを特定できます。