このトピックでは、Database Autonomy Service (DAS) のロック分析機能を使用してデータベースのデッドロックを分析する方法について説明します。この機能には、最近のデッドロック分析と完全なデッドロック分析が含まれます。
図中のデータはデモンストレーションのみを目的としています。実際には、スレッド ID や SQL 文などのパラメーターには、実際のデータを使用してください。
前提条件
ターゲットデータベースインスタンスは、次のいずれかのデータベースエンジンを実行します:
最近のデッドロック分析:
RDS MySQL
セルフマネージド MySQL
PolarDB for MySQL
PolarDB-X 2.0
完全なデッドロック分析:
RDS MySQL
PolarDB for MySQL
ターゲットデータベースインスタンスが DAS に接続されており、その接続ステータスが 正常なアクセス であること。詳細については、「データベースインスタンスを DAS に接続する」をご参照ください。
Alibaba Cloud Managed Services (旧 DAS Economy Edition) が有効になっていること。
重要Alibaba Cloud Managed Services (旧 DAS Economy Edition) は、一部のリージョンでのみ利用可能です。詳細については、「エディション別のサポート対象データベースとリージョン」をご参照ください。
Alibaba Cloud Managed Services (旧 DAS Economy Edition) を有効にするには、「Alibaba Cloud Managed Services (旧 DAS Economy Edition) の管理」をご参照ください。
最近のデッドロック分析
インスタンスの
innodb_deadlock_detectパラメーターを有効にします。説明このパラメーターは通常、デフォルトで有効になっています。
SHOW VARIABLES LIKE 'innodb_deadlock_detect'文を実行して確認できます。一部のインスタンスタイプでは、このパラメーターの値を変更できないことに注意してください。データベースインスタンスのパラメーターを変更するには:
RDS MySQL の場合、「インスタンスパラメーターの設定」をご参照ください。
PolarDB for MySQL の場合、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。
DAS は、
SHOW ENGINE INNODB STATUS文の出力から最新のデッドロックログを分析します。
複数のデッドロックが発生した場合、分析をトリガーすると、DAS は最新のデッドロックのみを分析します。分析結果は保存されます。
手順
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、[オペレーションセンター] > [インスタンス監視] をクリックします。
ターゲットインスタンスを見つけ、インスタンス ID をクリックして、インスタンス詳細ページに移動します。
左側のナビゲーションウィンドウで [ロック分析] をクリックします。[ロック分析] ページで、[最近のデッドロック分析] タブをクリックします。
[分析の作成] をクリックして、最近のデッドロック分析を開始します。

詳細の表示
期間を選択して、その期間中にトリガーされた診断タスクの結果を表示します。
最近のデッドロック分析の診断タスクのリストで、[詳細] 列の [詳細の表示] をクリックします。

パネルが表示され、デッドロックの詳細を表示する 3 つの方法が表示されます:
表示: デッドロック関係の可視化を表示します。トランザクションタイルをクリックすると、その下にトランザクションの詳細が表示されます。

リスト: ロックを保持しているトランザクションの詳細を並べて比較表示します。

ログ:
SHOW ENGINE INNODB STATUS文の出力から元のデッドロックログ (LATEST DETECTED DEADLOCK) を表示します。
SQL Explorer と監査による組み合わせ分析
ターゲットインスタンスの左側のナビゲーションウィンドウで、[SQL Explorer と監査] をクリックします。[監査] ページで、[高度なクエリを有効化] をクリックします。

デッドロックが発生した時間を含む期間を選択します。最近のデッドロック分析からスレッド ID を入力して、トランザクションが実行した SQL 文をクエリします。
上記の例のトランザクション 1

上記の例のトランザクション 2 (ロールバック済み)

完全なデッドロック分析
インスタンスの
innodb_deadlock_detectおよびinnodb_print_all_deadlocksパラメーターを有効にします。RDS MySQL インスタンスの場合、log_error_verbosityパラメーターを 3 に設定します。説明innodb_deadlock_detectパラメーターは通常、デフォルトで有効になっています。SHOW VARIABLES LIKE 'innodb_deadlock_detect'文を実行して確認できます。一部のインスタンスタイプでは、このパラメーターの値を変更できないことに注意してください。データベースインスタンスのパラメーターを変更するには:
RDS MySQL の場合、「インスタンスパラメーターの設定」をご参照ください。
PolarDB for MySQL の場合、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。
DAS は、インスタンスのエラーログからデッドロック情報を 1 時間ごとに解析し、デッドロック数の傾向と各デッドロックの詳細に関する統計を収集します。
クールダウン時間: Alibaba Cloud Managed Services (旧 DAS Economy Edition) がインスタンスで有効になっているが、必須パラメーターが有効になっていない場合、DAS は分析を 12 時間のクールダウン時間一時停止します。このクールダウン時間中に必須パラメーターを有効にすると、DAS はクールダウン期間の終了後に実行されるように分析タスクを再スケジュールします。例:
分析タスクは 11:12 にインスタンスに対してスケジュールされます。DAS が必須パラメーターが無効になっていることを検出すると、スケジュールされたタスクは保留され、12 時間のクールダウンが開始されます。23:12 に、DAS は完全なデッドロック分析タスクを再度実行しようとします。パラメーターがまだ無効な場合、別の 12 時間のクールダウンが開始されます。パラメーターが 23:12 より前に有効にされた場合、タスクは 23:12 にスケジュールどおりに実行され、パラメーターが無効になるか、インスタンスの Alibaba Cloud Managed Services (旧 DAS Economy Edition) がオフになるまで 1 時間ごとに実行され続けます。
完全なデッドロック分析は、「TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION」という記述を含むデッドロックをサポートしていません。
手順
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、[オペレーションセンター] > [インスタンス監視] をクリックします。
ターゲットインスタンスを見つけ、インスタンス ID をクリックして、インスタンス詳細ページに移動します。
左側のナビゲーションウィンドウで [ロック分析] をクリックします。[ロック分析] ページで、[完全なデッドロック分析] タブをクリックします。
完全なデッドロック分析は、インスタンスのエラーログからデッドロックログを 1 時間ごとに自動的に分析します。この機能は、デッドロック数に関する統計を収集し、ページの上部に [デッドロックの傾向] チャートをプロットします。期間を選択して、その期間のデッドロックの傾向を表示できます。

詳細の表示
完全なデッドロック分析のデッドロックリストで、[詳細] 列の [詳細の表示] をクリックします。

パネルが表示され、デッドロックの詳細を表示するための 3 つのタブ (表示、リスト、ログ) が表示されます。ログタブには、デッドロックに関連するエラーログが含まれています。表示タブとリストタブのフォーマットは、最近のデッドロック分析のものと同じです。詳細については、「最近のデッドロック分析で詳細を表示する」をご参照ください。

SQL Explorer と監査による組み合わせ分析
手順は、最近のデッドロック分析の場合と同じです。詳細については、「最近のデッドロック分析における SQL Explorer と監査による組み合わせ分析」をご参照ください。