DeadLock タブが追加され、ApsaraDB RDS for SQL Server インスタンスに関するデッドロック情報が表示されるようになりました。情報には、トランザクションの開始時刻、セッション ID、ロックされたリソースの詳細、デッドロックの種類などが含まれます。この情報に基づいて、デッドロックの原因となっている SQL ステートメントやその他の例外を特定し、最適化することができます。このトピックでは、ApsaraDB RDS コンソールで ApsaraDB RDS for SQL Server インスタンスのデッドロック統計を表示する方法について説明します。
背景情報
特定のリソースを変更するためにトランザクションを実行すると、他の同時実行トランザクションによる変更を防ぐために、そのリソースはロックされます。これにより、データの整合性が確保されます。
ほとんどの場合、デッドロックは複数のトランザクションが同じリソースを競合する場合に発生します。次の例では、トランザクション A がリソース A をロックし、リソース B を変更しようとしますが、トランザクション B がリソース B をロックし、リソース A を変更しようとします。その結果、トランザクション A とトランザクション B は互いに占有されているリソースを待機し、デッドロックが発生します。この場合、システムは SQL ステートメントが低コストで実行されているセッションを自動的に終了し、セッション内のタスクは失敗します。
デッドロックの種類
ApsaraDB RDS は、以下の種類のデッドロックを分析できます。
KeyDeadlock
ObjectDeadLock
RIDDeadlock
PageDeadlock
ComplieDeadlock
各デッドロックの種類の詳細については、「Lock granularity and hierarchies」をご参照ください。
ロックモード
トランザクションがリソースにアクセスする場合、リソースをロックするために使用されるロックモードは、アクセスの種類によって異なります。 ApsaraDB RDS for SQL Server は、以下のロックモードをサポートしています。
共有 (S): トランザクションがリソースに対して共有ロックを取得した後、トランザクションが共有ロックを解放するまで、リソースは読み取り専用になり、変更することはできません。
更新 (U): トランザクションがリソースに対して更新ロックを取得した後、後続のトランザクションがリソースに対して排他ロックを取得するまで、別のトランザクションによってリソースを変更することはできません。
排他 (X): トランザクションがリソースに対して排他ロックを取得した後、前のトランザクションが排他ロックを解放するまで、別のトランザクションはリソースにアクセスできません。
前提条件
RDS インスタンスでクラウドディスクを使用して SQL Server 2008 R2 を実行していないこと。
RDS インスタンスは、次のリージョンのいずれかに存在します: 中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深圳)、中国 (河源)、中国 (広州)、中国 (成都)、中国 (香港)、シンガポール、UAE (ドバイ)。
デッドロックの詳細を表示する
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけ、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
DeadLock タブの概要
デッドロック数
このセクションには、最近の時間範囲におけるデッドロックの数が表示されます。時間範囲を指定して、デッドロックの数を表示できます。

デッドロックの傾向
このセクションには、特定の時間範囲に発生したさまざまな種類のデッドロックが表示されます。以下の操作を実行して、デッドロック情報をクエリできます。
[開始時刻] と [終了時刻] を指定します。 次に、[検索] をクリックして、指定した時間範囲に発生したデッドロックの傾向を表示します。 開始時刻と終了時刻の間隔は 30 日を超えることはできません。
[過去 24 時間]、[過去 7 日間]、または [過去 1 か月] をクリックして、過去 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: セッション内のトランザクションの実行に使用されるアカウントのユーザー名を示します。
Status: セッション内のトランザクションのステータスを示します。
ClientApp: セッション内のトランザクションを開始したクライアントの名前を示します。
[SQLText] : セッションで実行される SQL 文の詳細を示します。
説明SQL 文をクリックしてコピーし、さらに分析できます。
デッドロックレコードをクリックすると、「デッドロックダイアグラム」セクションにデッドロックのダイアグラムが表示されます。
デッドロックダイアグラム

このセクションには、ブロッキングセッションとブロックされたセッションの関係が表示されます。また、ロックされたリソースに関する詳細も表示されます。[ダウンロード] をクリックすると、デッドロックの詳細を含む XDL ファイルをダウンロードできます。このファイルは、SQL Server Management Studio (SSMS) を使用して開いて表示できます。