このトピックでは、ApsaraDB RDS for SQL Serverインスタンスのブロッキング統計を表示する方法について説明します。 ブロック統計に基づいて、RDSインスタンスのブロックの問題を特定して解決できます。
前提条件
RDSインスタンスにはクラウドディスクが搭載されています。
RDSインスタンスは、クラウドディスクでSQL Server 2008 R2を実行しません。
背景情報
セッションが特定のリソースを変更している場合、SQL Serverはリソースをロックして、他の同時セッションからのアクセスや変更を防止します。 これにより、SQL Serverはデータの整合性を確保できます。 ほとんどの場合、SQL Serverは短時間ロックを保持します。 セッションでリソースの変更が完了すると、SQL Serverは直ちにリソースを解放し、次のセッションでリソースへのアクセスを許可します。 ただし、セッション内の低速なSQL文やその他の例外により、リソースは長期間ロックされたままになる可能性があります。 これにより、RDSインスタンスのパフォーマンスが大幅に低下します。
上記のブロッキングの問題を解決するために、ApsaraDB RDSはApsaraDB RDSコンソールでブロッキング統計を提供します。 ブロッキング統計には、ブロッキングセッションのID、ブロッキングの問題が発生した時刻、およびブロッキングの問題を引き起こしたSQL文が含まれます。
サンプリング
ほとんどの場合、セッションで約2秒間続くブロッキングの問題が発生しても、RDSインスタンスのパフォーマンスは大幅に低下しません。 ただし、複数の連続したセッションがそれぞれ約2秒続くブロックの問題を引き起こすと、RDSインスタンスのパフォーマンスが大幅に低下します。
システムは10秒ごとに1回ブロッキング問題をサンプリングします。 システムがブロッキング統計をサンプリングする各時点で、SQL文を実行して他のセッションをブロックするのに2秒以上かかるセッションが記録されます。
手順
- [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > ロックの最適化 を選択します。
表示されるページで、[ブロック] タブをクリックして、RDSインスタンスに関するブロック統計を照会します。
[ブロック] タブの概要
ブロックセッション数
このセクションには、最近の時間範囲でのブロッキングセッションの数が表示されます。
ブロッキングトレンド
このセクションでは、特定の時間範囲でのブロッキング期間の傾向を表示します。
特定の時点にポインターを移動して、その時点で発生したブロッキング問題の詳細を照会します。 詳細には、次の情報が含まれます。
ブロッキングの問題が発生した時刻。
ブロックされたセッションの数。 この数は、Processes_blockedパラメーターで示されます。
コミットされていないトランザクションの数。 この数値は、Uncommited_tranパラメーターで示されます。
説明トランザクションがコミットされないため、ブロッキングの問題を引き起こしたロックは解放できません。
実行されたSQL文のハッシュ値と、SQL文がブロックされている期間。
ソースの詳細のブロック
このセクションには、各ブロッキングセッションの詳細が表示されます。 詳細には、次の情報が含まれます。
Spid: セッションのID。
QueryHash: セッションで要求されたステートメントのハッシュ値。 同じタイプのSQL文のハッシュ値は同じです。
待機タイプ: 待機状態にある別のセッションをセッションがブロックする理由。 待機タイプの詳細については、「sys.dm_os_wait_stats (Transact-SQL) 」をご参照ください。
実行期間 (ms): 要求されたSQL文を実行するためにセッションに必要な時間の長さ。 単位:ミリ秒。
SQL: ブロックの問題を引き起こすSQL文。
説明SQL文の上にポインターを移動できます。 次に、SQL文の右側に表示されるアイコンをクリックして、SQL文をコピーできます。
Time: ブロッキングの問題が発生した時刻。
データベース名: ブロックの問題が発生したデータベースの名前。
ブロッキングレコード内の任意の場所をクリックすると、ブロッキングの問題のダイアグラムを表示できます。
ブロック図
このセクションには、ブロッキングセッションのID、ブロックされたセッションのID、ロックの種類、およびブロッキング期間が表示されます。 次の例では、ブロックセッションは赤でマークされ、ブロックセッションは青でマークされています。 ロックの種類の詳細については、「トランザクションのロックと行のバージョン管理ガイド」をご参照ください。
セッションのIDの上にポインターを移動して、セッション内のブロッキング問題の詳細を表示できます。 詳細には、次の情報が含まれます。
SPID: ブロッキングセッションのID。
BlockedBySpid: ブロックされたセッションのID。
WaitType: セッション内の待機のタイプ。
WaitTimeMs: セッションでのブロッキングの期間。 単位:ミリ秒。
CMD: セッションで実行されるSQL文の型。
CPU: セッションによってCPUリソースが使用されている期間。 単位:ミリ秒。
DBName: セッションが実行されるデータベースの名前。
ClientAppName: セッションが開始されるクライアントの名前。
HostName: セッションが開始されるクライアントのホスト名。
LoginId: セッションへのログインに使用されるユーザー名。
PhysicalIO: 要求されたSQL文を実行するためにセッションによって消費されるI/Oリソース。 各物理I/Oは8 KBに等しい。
QueryHash: セッションで要求されたステートメントのハッシュ値。 同じタイプのSQL文のハッシュ値は同じです。
StartTime: セッションで要求されたSQL文を含むSQL文のバッチの実行をシステムが開始した時刻。 各バッチには複数のSQL文を含めることができ、変数の値などのリソースを共有できます。
ステータス: RDSインスタンスのステータス。
SQL: ブロックするセッションまたはブロックするセッションのIDをクリックすると、セッション内の要求されたSQL文の詳細が [ブロック図] セクションに表示されます。
SQLの詳細
ブロック図で、ブロックセッションまたはブロックされたセッションのIDをクリックして、セッション内の要求されたSQL文に関する詳細を表示します。 ステートメントをコピーしてさらに分析することもできます。