このトピックでは、Database Autonomy Service (DAS) のロック分析機能を使用してデータベースのデッドロックを分析する方法について説明します。 デッドロック分析は、最近のデッドロック分析と完全なデッドロック分析を対象としています。
次の図に示されているデータはテストデータとして使用され、参照のみのためです。 実際のシナリオでは、スレッドIDやSQL文などのパラメーターは、実際のデータベース環境によって異なります。
前提条件
データベースインスタンスは、次のいずれかのデータベースエンジンを実行します。
最近のデッドロック分析:
ApsaraDB RDS for MySQL
自己管理型 MySQL データベース
PolarDB for MySQL
PolarDB-Xの2.0
完全なデッドロック分析:
ApsaraDB RDS for MySQL
PolarDB for MySQL
データベースインスタンスがDASに接続されており、正常なアクセス 状態です。 詳細については、「データベースインスタンスのDASへの接続」をご参照ください。
DAS Economy EditionまたはDAS Enterprise Editionが有効になっています。
重要DAS Economy EditionおよびDAS Enterprise Editionは、特定のリージョンでのみ使用できます。 詳細については、「DASのエディションとサポートされている機能」トピックのサポートされているデータベースとリージョンのセクションを参照してください。
DAS Economy EditionまたはDAS Enterprise Editionを有効にする方法の詳細については、「DAS Economy EditionおよびDAS Enterprise Editionの有効化と管理」トピックのDAS Economy EditionおよびDAS Enterprise Editionの有効化セクションを参照してください。
最近のデッドロック分析
パラメーター設定:
innodb_deadlock_detect
パラメーターをONに設定する必要があります。データベースインスタンスのパラメーターを変更する方法の詳細については、データベースインスタンスのデータベースエンジンに基づいて次のいずれかのトピックを参照してください。
ApsaraDB RDS for MySQL: インスタンスパラメーターの変更
PolarDB for MySQL: クラスターとノードパラメーターの設定
データ分析: DASは、
SHOW ENGINE INNODB STATUS
ステートメントの出力にある最新のデッドロックログを分析します。
複数のデッドロックが発生した場合、DASは最新のデッドロックのみを分析し、デッドロックデータを保持します。
手順
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
左側のナビゲーションウィンドウで、[ロック分析] をクリックします。 [ロック分析] ページで、[最近のデッドロック分析] タブをクリックします。
次に、[分析タスクの作成] をクリックして、最新のデッドロックを分析します。
詳細を見る
デッドロック分析結果を表示する時間範囲を指定します。
[最近のデッドロック分析] タブで、分析タスクの [詳細] 列の [詳細の表示] をクリックします。
次のいずれかの方法を使用して、デッドロックの詳細を表示できます。
ビュー: 視覚化されたデッドロック関係を使用してデッドロックの詳細を表示します。 対応するトランザクションタイルをクリックすると、下部にトランザクションの詳細が表示されます。
List: リスト内のロック保持トランザクションの詳細を比較します。
ログ:
SHOW ENGINE INNODB STATUS
ステートメントの出力に元のデッドロックログ (LATEST DETECTED deadlock) が表示されます。
SQL Explorerと監査を使用したデッドロック分析
左側のナビゲーションウィンドウで、[SQL Explorerと監査] をクリックします。 [監査] タブで、[詳細クエリの有効化] をクリックします。
デッドロックが発生した時間をカバーする時間範囲を選択し、最近のデッドロック分析から識別されたスレッドIDを入力して、トランザクションによって実行されたSQL文を照会します。
前のサンプルのトランザクション1
前のサンプルのトランザクション2 (ロールバック)
完全なデッドロック分析
パラメーター設定:
innodb_deadlock_detect
およびinnodb_print_all_deadlocks
パラメーターをONに設定する必要があります。 ApsaraDB RDS for MySQLインスタンスを使用する場合は、log_error_verbosity
パラメーターを3に設定します。データベースインスタンスのパラメーターを変更する方法の詳細については、データベースインスタンスのデータベースエンジンに基づいて次のいずれかのトピックを参照してください。
ApsaraDB RDS for MySQL: インスタンスパラメーターの変更
PolarDB for MySQL: クラスターとノードパラメーターの設定
データ分析: DASは、インスタンスエラーログに表示されるデッドロック情報を1時間ごとに解析し、デッドロック数の傾向と各デッドロックの詳細に関する統計を収集します。
クールダウン期間: インスタンスに対してDAS Economy EditionまたはDAS Enterprise Editionが有効になっているが、必要なパラメーターが無効になっている場合、インスタンスは12時間冷却されます。 クールダウン期間中、DASはデッドロック分析を実行しません。 クールダウン期間中に必要なパラメーターを有効にすると、DASはクールダウン期間後に分析タスクを再スケジュールします。 例:
11:12に分析タスクがスケジュールされているインスタンスに対して必須パラメーターが無効になっていることをDASが検出した場合、タスクは12時間冷却されます。 DASは、23:12にインスタンスの完全なデッドロック分析タスクを再スケジュールします。 最初のクールダウン期間の後でもパラメーターが無効になっている場合、スケジュールされたタスクはさらに12時間冷却され続けます。 パラメータが23:12の前に有効になっている場合、現在のクールダウン期間は23:12の後に無効になります。 次に、スケジュールされたタスクは、インスタンスのパラメーターが無効になるか、インスタンスのDAS Economy EditionまたはDAS Enterprise Editionが無効になるまで、1時間ごとに完全なデッドロック分析を実行します。
完全なデッドロック分析機能を使用して、次の情報が含まれているデッドロックを分析することはできません。LOCK TABLE WAITSのDEEPまたはLONG SEARCH-GRAPHの場合、トランザクション後にロールバックします。
手順
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
左側のナビゲーションウィンドウで、[ロック分析] をクリックします。 [ロック分析] ページで、[フルデッドロック分析] タブをクリックします。
完全デッドロック分析機能は、インスタンスエラーログに表示されるデッドロック情報を1時間ごとに自動的に分析し、デッドロックの数に関する統計を収集し、ページの上部にデッドロックトレンドチャートをプロットします。 デッドロックトレンドを表示する時間範囲を指定します。
詳細を見る
[フルデッドロック分析] タブで、デッドロック分析タスクの [詳細] 列の [詳細の表示] をクリックします。
デッドロックの詳細を表示するには、ビュー、リスト、ログのいずれかの方法を使用します。 ログにはデッドロックエラー情報が含まれています。 完全デッドロック分析のビューとリストは、最近のデッドロック分析のビューとリストと同じ形式で表示されます。 詳細については、このトピックの「最近のデッドロック分析」セクションの「詳細の表示」サブセクションを参照してください。
SQL Explorerと監査を使用したデッドロック分析
完全デッドロック分析にSQL ExplorerとAuditを使用する手順は、最近のデッドロック分析にSQL ExplorerとAuditを使用する手順と同じです。 詳細については、このトピックの「最近のデッドロック分析」セクションの「SQLエクスプローラーと監査を使用したデッドロック分析」サブセクションを参照してください。