このトピックでは、ApsaraDB RDSコンソールでApsaraDB RDS for SQL Serverインスタンスのデッドロック統計を表示する方法について説明します。
前提条件
RDSインスタンスは、クラウドディスクでSQL Server 2008 R2を実行しません。
背景情報
トランザクションを実行して特定のリソースを変更する場合、リソースはロックされ、他の同時トランザクションによる変更を防止します。 これによりデータの整合性が保証されます。
ほとんどの場合、複数のトランザクションが同じリソースを求めて競合すると、デッドロックが発生します。 次の例では、トランザクションAがリソースAを変更しているときに、トランザクションBによって変更されているリソースBを変更する要求も開始します。この場合、デッドロックが発生します。
デッドロックの問題を解決するために、SQL Serverは、他のトランザクションよりも低コストでロールバックできるトランザクションを終了します。 終了したトランザクションでタスクを完了する場合は、トランザクションを再度実行する必要があります。
ApsaraDB RDSは、ApsaraDB RDSコンソールでさまざまなデッドロックの統計を提供します。 データベースで発生するさまざまなタイプのデッドロックをすばやく見つけることができます。 デッドロック統計には、ブロッキングおよびブロックされたトランザクションの開始時間、ブロッキングおよびブロックされたセッションのID、ロックされたリソースに関する詳細、および発生するデッドロックのタイプが含まれます。 デッドロックの原因となる問題のあるSQL文やその他の例外を特定し、RDSインスタンスを最適化してデッドロックの問題を解決できます。
デッドロックタイプ
ApsaraDB RDSは、次のタイプのデッドロックを分析できます。
KeyDeadlock
ObjectDeadLock
RIDDeadlock
PageDeadlock
ComplieDeadlock
各タイプのデッドロックの詳細については、 ロックの粒度と階層。
ロックモード
ApsaraDB RDS for SQL Serverは、同時トランザクションによるリソースへのアクセス方法を決定するさまざまなロックモードを使用してリソースをロックします。 トランザクションによってアクセスされるリソースをロックするために使用されるロックモードは、トランザクションによって必要とされる操作のタイプに基づいて変化する。 ApsaraDB RDS for SQL Serverは、次のロックモードをサポートしています。
共有 (S): トランザクションがリソースの共有ロックを取得した後、リソースは読み取りのみ可能ですが、トランザクションが共有ロックを解放するまで変更できません。
更新 (U): トランザクションがリソース上の更新ロックを取得した後、別のトランザクションがリソース上の排他ロックを取得するまで、別のトランザクションによってリソースを変更することはできません。
排他的 (X): トランザクションがリソース上の排他的ロックを取得した後、前のトランザクションが排他的ロックを解放するまで、リソースは別のトランザクションによってアクセスされることができない。
ロックモードの詳細については、 ロックモード。
手順
- [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[デッドロック] タブの概要
数のデッドロック
このセクションには、最近の時間範囲でのデッドロックの数が表示されます。
デッドロックトレンド
このセクションには、特定の時間範囲で発生したさまざまなタイプのデッドロックが表示されます。 デッドロック情報を照会するには、次の操作を実行します。
開始時刻と終了時刻を指定します。 次に、[検索] をクリックして、指定した時間範囲で発生したデッドロックの傾向を表示します。
説明開始時間と終了時間の間隔は30日を超えることはできません。
[過去24時間] 、[過去7日間] 、または [前月] をクリックして、過去1日、過去7日、または過去30日間に発生したデッドロックの傾向を表示します。
特定の時点にポインターを移動すると、その時点で発生したデッドロックの種類と数が表示されます。
トレンドチャートの右上隅にあるアイコンをクリックして、トレンドチャートの表示スタイルを変更し、トレンドチャートを画像としてダウンロードします。
デッドロックの詳細
デッドロックの詳細を表示します。 デッドロックレコードの左側にあるアイコンをクリックすると、ブロックされたセッションとブロックされたセッションの詳細が表示されます。 詳細には、次の情報が含まれます。
LastTranStarted: セッションでトランザクションが開始された時刻を示します。
SPID: セッションのIDを示します。
IsVictim: セッションが終了したかどうかを示します。
説明SQL Serverは、定期的にデッドロックをチェックするデッドロック監視スレッドを提供します。 デッドロックが検出された場合、SQL Serverはブロックセッションとブロックセッションを評価し、他のセッションよりも低コストでトランザクションをロールバックできるセッションを終了します。 たとえば、SELECTステートメントを実行するセッションとUPDATEステートメントを実行するセッションの間でデッドロックが発生します。 SELECTステートメントは、UPDATEステートメントよりも低コストでロールバックできます。 この場合、SQL ServerはSELECTステートメントを実行するセッションを終了します。
LogUsed: セッションで生成されたログのサイズを示します。 単位:バイト
LockMode: デッドロックのロックモードを示します。 詳細については、「ロックモード」をご参照ください。
WaitResourceDesc: トランザクションがセッションで待機しているリソースに関する詳細を示します。
ObjectOwned: セッションでロックされているオブジェクトを示します。
ObjectRequested: トランザクションがセッション内でロックを要求するオブジェクトを示します。
WaitResource: トランザクションがセッションで待機しているリソースの名前を示します。
HostName: セッション内のトランザクションが実行されるホストの名前を示します。
LoginName: セッションでトランザクションを実行するために使用されるアカウントのユーザー名を示します。
ステータス: セッション内のトランザクションのステータスを示します。
ClientApp: セッションでトランザクションを開始するクライアントの名前を示します。
SQLText: セッションで実行されるSQL文の詳細を示します。
説明SQL文をクリックすると、SQL文をコピーしてさらに分析できます。
デッドロックレコードをクリックすると、[デッドロック図] セクションでデッドロックの図を表示できます。
デッドロック図
このセクションでは、ブロックセッションとブロックセッションの関係を表示します。 このセクションには、ロックされたリソースに関する詳細も表示されます。 [ダウンロード] をクリックすると、ダイアグラムをXDLファイルとしてダウンロードできます。 このファイルには、デッドロックに関する詳細が含まれています。 このファイルは、SQL Server Management Studio (SSMS) を使用して開いて表示できます。 詳細については、「SQL Server Management Studio (SSMS) のダウンロード」をご参照ください。