SQL Server 2000 および SQL Server 2005 の master.dbo.sysprocesses テーブル内の waittype 列および lastwaittype 列について


概要


Microsoft SQL Server 2000 および SQL Server 2005 の master.dbo.sysprocesses テーブルは、SQL Server 上で実行されているアクティブなサーバー プロセス ID (SPID) に関する情報が格納されたシステム テーブルです。


SQL Server 2005 を使用している場合は、sys.sysprocesses 互換性ビューを使用してこのテーブルにアクセスすることもできます。


master.dbo.sysprocesses システム テーブルの waittype 列、lastwaittype 列、waittime 列、および waitresource 列には、プロセスが待機状態になっているリソースに関する情報が格納されています。


この資料では、lastwaittype に格納される値および関連する waittype の値の一覧を掲載し、それぞれの意味について簡単に説明します。

詳細


SQL Server のインスタンスの master データベースに保存される master.dbo.sysprocesses システム テーブルには以下の列が含まれており、システム管理者がプロセスを監視してリソースの競合やブロックの問題を発見するのに役立ちます。
  • waittype : waittype フィールドは、予約されている内部的なバイナリの列です。waittype フィールドの値は、待機している接続が存在するリソースの種類を示します。
  • lastwaittype : lastwaittype フィールドは、waittype フィールドの内容を示す文字列です。lastwaittype フィールドは、SPID の直前または現在の waittype を示します。ある SPID に対する waittype 列の値が 0x0000 の場合、その SPID は現在リソースの解放待ちをしていません。この場合、lastwaittype 列には、SPID の直前の waittype が示されています。一方、ある SPID に対する waittype 列の値が 0 以外の場合、その SPID に対する lastwaittype 列および waittype 列の値は同じです。これらの値は、その SPID に関する現在の待機状態を示します。


    : UMSTHREAD waittype は、この原則の例外です。詳細については、「その他の waittype」の UMSTHREAD の説明を参照してください。
  • waittime : waittime 列には、SPID が現在の waittype で待機している時間がミリ秒単位で示されます。
  • waitresource : waitresource 列には、SPID が解放待ちをしているリソースに関する詳細情報が示されます。
この資料の後半では、SQL Server でサポートされている中でも、master.dbo.sysprocesses システム テーブルに記録される頻度の高い waittype について説明します。

ロックの waittype

次の表は、SQL Server 2000 および SQL Server 2005 の master.dbo.sysprocesses システム テーブルで使用されるロックの waittype の一覧です。
Lastwaittype
waittype
説明
LCK_M_SCH_S
0x01
スキーマの安定性
LCK_M_SCH_M
0x02
スキーマ変更
LCK_M_S
0x03
共有
LCK_M_U
0x04
更新
LCK_M_X
0x05
排他
LCK_M_IS
0x06
インテント-共有
LCK_M_IU
0x07
インテント-更新
LCK_M_IX
0x08
インテント-排他
LCK_M_SIU
0x09
更新する共有インテント
LCK_M_SIX
0x0a
共有-インテント-排他
LCK_M_UIX
0x0b
更新-インテント-排他
LCK_M_BU
0x0c
一括更新
LCK_M_RS_S
0x0d
範囲-共有-共有
LCK_M_RS_U
0x0e
範囲-共有-更新
LCK_M_RI_NL
0x0F
範囲-挿入-NULL
LCK_M_RI_S
0x10
範囲-挿入-共有
LCK_M_RI_U
0x11
範囲-挿入-更新
LCK_M_RI_X
0x12
範囲-挿入-排他
LCK_M_RX_S
0x13
範囲-排他-共有
LCK_M_RX_U
0x14
範囲-排他-更新
LCK_M_RX_X
0x15
範囲-排他-排他
SQL Server 2000 および SQL Server 2005 でサポートされているロックの種類の詳細については、SQL Server Books Online の以下のトピックを参照してください。
  • SQL Server のロック
  • ロックの互換性
また、SPID がロックの waittype で待機状態であり、master.dbo.sysprocesses システム テーブルに記録された対応する waittime 列の値が非常に大きい場合、その SQL Server のインスタンスでブロックの問題のトラブルシューティングを行う必要があります。


関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
224453 [INF] SQL Server 7.0 または SQL Server 2000 のブロッキング問題と解決策

ラッチの waittype

ラッチは、負荷の軽い短期の同期オブジェクトです。次の表は、さまざまな種類のラッチの一覧です。
  • バッファなし (Non-BUF) ラッチ : バッファなしのラッチは、メモリ上のデータ構造体の同期や、競合の影響を受けるコード行の再入防止に使用されます。このラッチの用途は多岐にわたりますが、バッファ ページへのアクセスの同期には使用されません。
  • バッファ (BUF) ラッチ : バッファ ラッチは、BUF 構造体および関連するデータベース ページへのアクセスを同期するために使用されます。通常、バッファ ラッチが使用されるのは、バッファ ページの直列化が必要な処理 (ページの分割や新しいページの割り当てなど) の実行時です。このラッチはトランザクション終了時まで保持されるものではありません。このラッチは、master.dbo.sysprocesses には PAGELATCH という waittype で示されます。


    BUF ラッチの競合が発生する原因の 1 つに関する情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    328551 [FIX] tempdb データベースの同時実行制御の強化
  • IO ラッチ : IO ラッチは BUF ラッチのサブセットであり、バッファおよび関連するデータ ページまたはインデックス ページで入出力処理を実行中の場合に使用されます。ディスクからメモリへの転送には PAGEIOLATCH waittype が使用され、この waittype に対する waittime の値が大きい場合は、ディスク入出力サブシステムに問題があります。
次の表は、SQL Server 2000 および SQL Server 2005 の master.dbo.sysprocesses システム テーブルに記録されるさまざまなラッチの waittype の一覧です。
Lastwaittype
waittype
説明
LATCH_NL
0x400
NULL ラッチ
LATCH_KP
0x401
保持ラッチ
LATCH_SH
0x402
共有ラッチ
LATCH_UP
0x403
更新ラッチ
LATCH_EX
0x404
排他ラッチ
LATCH_DT
0x405
破棄ラッチ
PAGELATCH_NL
0x410
バッファ ページ NULL ラッチ
PAGELATCH_KP
0x411
バッファ ページ保持ラッチ
PAGELATCH_SH
0x412
バッファ ページ共有ラッチ
PAGELATCH_UP
0x413
バッファ ページ更新ラッチ
PAGELATCH_EX
0x414
バッファ ページ排他ラッチ
PAGELATCH_DT
0x415
バッファ ページ破棄ラッチ
PAGEIOLATCH_NL
0x420
バッファ ページ I/O NULL ラッチ
PAGEIOLATCH_KP
0x421
バッファ ページ I/O 保持ラッチ
PAGEIOLATCH_SH
0x422
バッファ ページ I/O 共有ラッチ
PAGEIOLATCH_UP
0x423
バッファ ページ I/O 更新ラッチ
PAGEIOLATCH_EX
0x424
バッファ ページ I/O 排他ラッチ
PAGEIOLATCH_DT
0x425
バッファ ページ I/O 破棄ラッチ


SQL Server 2000 SP4 以降では、最も一般的な Non-BUF ラッチである Latch_XX ラッチの waitresource 列が次の表の値で設定されます。SP4 より前の SQL Server 2000 では、ユーザーダンプなどでさらに詳細に診断しなければ、Non-BUF ラッチが保持されていた理由を特定できません。waittype または waitresource は waittime を使用して表示されます。waittime により、ミリ秒単位でスレッドの待機時間が指定されます。
waitresource説明トラブルシューティング
FCB FGCB_ALLOC
これらの Latch_XX ラッチは、ページがファイルから割り当てられる場合に保持されます。これは単一エクステントでも混合エクステントでも同じです。これらのラッチは、ファイルの拡張や圧縮、ファイルの名前変更やドラッグ アンド ドロップ、およびファイルの追加や削除などの割り当て操作でも保持されます。
ファイルが圧縮または拡張されているかどうかを判断します。SQL Server 2000 SP4 以降では、自動拡張処理が 30 秒を超える場合、自動拡張オプションがエラー ログに記録されます。理想的には、自動拡張オプションをバックアップとして使用し、容量設計を慎重に行って、実行時にファイル拡張のパフォーマンスが低下しないようにする必要があります。また、自動拡張のデフォルト値は 10% ですが、これを任意の固定サイズに変更できます。運用環境では自動圧縮機能を使用しないことをお勧めします。このファイルグループに含まれるファイルから多数の割り当て要求が発行されている場合もあります。そのようなファイルグループにさらにファイルを追加できます。
TRACE TRACE_CONTROLLER TRACE_IO_SYNC
これらの Latch_XX ラッチは、プロファイラ トレース操作で同期を行うために保持されます。同期操作では、トレースの開始や停止、トレース状態の設定、およびリーダーとライタの同期が実行されます。
実行中のプロファイラ トレースを特定します。同時に複数のプロファイラ トレースを実行しないようにします。プロファイラ トレースが開始されると、トレースがアプリケーション イベント ログに記録されます。さらに、SQL クエリ アナライザで次のクエリを使用することにより、アクティブなトレースを表示できます。
SELECT * FROM 
::fn_trace_getinfo(NULL)
PARALLEL_PAGE_SUPPLIER
これらの Latch_XX ラッチは、クエリの並列実行用のページの取得を同期するために使用されます。このラッチはそのクエリが並列実行されていることを示し、通常のバッファ ラッチになる場合があります。
waittime 列の値が大きいためにクエリのパフォーマンスが低い場合、そのクエリのチューニングを行います。
IDES
IDES ラッチの waitresource は、空き領域を見つけるために PFS ページをスキャンし、ページの割り当てと割り当て解除を反映するためにその PFS ページを更新する場合に使用されます。このラッチは、既存のオブジェクトに単一のページが割り当てられる場合も使用されます。
問題のオブジェクトのクラスタ化インデックスを使用しているかどうかを判断します。

その他の waittype

次の表は、SQL Server 2000 および SQL Server 2005 の master.dbo.sysprocesses システム テーブルに記録される可能性のあるその他の waittype の一覧です。
Lastwaittype
waittype
説明
SLEEP
0x20
この waittype は、指定された時間、SPID が待機状態にあることを示すもので、レイジー ライタによる書き込み、チェックポイント、またはサーバー側プロファイラのトレース イベントを処理するバックグラウンド スレッドで発生することの多い状態です。
IO_COMPLETION
0x21
この waittype は、SPID が I/O 要求が完了するまで待機していることを示します。sysprocesses システム テーブルで SPID に対してこの waittype が記録されている場合、パフォーマンス モニタのカウンタ、プロファイラ トレース、fn_virtualfilestats システム テーブル値関数および SHOWPLAN オプションを使用してディスクのボトルネックを特定して、その SPID に対応するクエリ プランを分析する必要があります。I/O の帯域を広げるか I/O アクセスを他のドライブに分散させることにより、この waittype の出力を低減することができます。また、インデックスの使用や、不適切なクエリ プランの調査、メモリに対する過負荷の調査を行って I/O を低減することもできます。
ASYNC_IO_COMPLETION
0x22
この waittype は、SPID が非同期 I/O 要求が完了するまで待機していることを示します。IO_COMPLETION waittype と同様、この waittype も I/O ボトルネックが存在することを示します。BACKUP、CREATE DATABASE、ALTER DATABASE やデータベースの自動拡張などの長時間にわたる I/O 関連処理の実行中に、SPID に対してこの waittype が出力されることがあります。この waittype はディスクのボトルネックを示している場合もあります。
RESOURCE_SEMAPHORE
0x40
この waittype は、SPID がリソースの解放待ちをしていることを示します。この場合、通常 SPID はクエリの実行中に並べ替えまたはハッシュ処理用のメモリを取得するために待機しています。この waittype は、バッファ プールの可視部分にメモリの過負荷が存在することを示している場合もあります。
DTC
0x41
この waittype は、SPID が Microsoft 分散トランザクション コーディネータ (MS DTC) サービスの解放待ちをしていることを示します。
OLEDB
0x42
この waittype は、SPID が OLE DB プロバイダに対して関数の呼び出しを実行し、要求したデータが関数から返されるまで待機していることを示します。この waittype は、要求したデータがリモート プロシージャ コールまたはリンク サーバー クエリから返されるまで SPID が待機していることを示している場合もあります。要求したデータが BULK INSERT コマンドまたはフルテキスト検索クエリから返されるまで SPID が待機している場合もあります。


OLEDB waittype は、リンク サーバー クエリ、フルテキスト検索クエリ、BULK INSERT コマンド、クライアント側のプロファイラ トレース、sysprocesses テーブルなどの仮想テーブルの具体化、ログ リーダー、DBCC CHECKDB などのさまざまな待機状態を示すために使用されます。
RESOURCE_QUEUE
0x44
これは、SQL Server のバックグラウンド スレッドの通常のアイドル状態です。
ASYNC_DISKPOOL_LOCK
0x45
データベース ファイルの作成、拡張、削除などの長時間にわたる I/O 関連の処理の実行中にこの waittype が記録されることがあります。
UMSTHREAD
0x46
この waittype は、クライアント アプリケーションから受信したバッチがあり、その要求を処理するためのワーカー スレッドが不足していることを示します。複数の SPID に対して繰り返し x0046 waittype が記録されている場合、システムのどこかに深刻なボトルネックが存在し、ワーカー スレッドがすべて使用されています。UMSTHREAD waittype に対する waittime 列の値は常に 0 であり、lastwaittype 列には UMSTHREAD ではなく、別の waittype の名前が誤って表示されることがあります。
WRITELOG
0x81
この waittype は、SPID がトランザクション ログ I/O 要求が完了するまで待機していることを示します。この waittype は、ディスクのボトルネックが存在することを示している可能性もあります。
PSS_CHILD

EXCHANGE

CXPACKET
0x101

0x200

0x208
これらの waittype はすべてクエリの並列実行に関するものです。これらの waittype は、SPID が並列処理の完了または開始を待っていることを示します。
PAGESUPP
0x209
この waittype は、並列スキャンの複数の呼び出し元に行を分散するために必要な直列化によって発生した待ち時間を追跡するためのものです。
CURSOR
0x20C
この waittype は、SPID が非同期のカーソルを使用し、スレッドの同期を行っていることを示します。環境設定オプション sp_configure ‘cursorthreshold’ により、カーソルが非同期で作成された時期を確認できる場合があります。
DBTABLE
0x202
この waittype は、スレッドがチェックポイント処理の実行待ちをしていて、他のスレッドが既にデータベースのチェックポイント処理を実行していること示します。
EC
0x203
この waittype は、SPID が実行コンテキストへのアクセス待ちをしていることを示します。
TEMPOBJ
0x204
この waittype は、削除対象の一時オブジェクトがまだ使用中のため SPID が待機していることを示します。
XACTLOCKINFO
0x205
この waittype は、ロック一覧の保守の実行待ちをしていることを示します。
LOGMGR
0x206
この waittype は、SPID がデータベースをシャットダウンするために、未完了のトランザクション ログ I/O 要求が完了するまで待機しているときに使用されます。
CMEMTHREAD
0x207
この waittype は、SPID がスレッドセーフなメモリ オブジェクトへのアクセスを待っていることを示します。直列化が行われるため、ユーザーがメモリ オブジェクトからメモリの割り当てまたは解放を行っている間、同じタスクを実行しようとする他の SPID は待機する必要があり、SPID の待機中は CMEMTHREAD waittype が設定されます。


この waittype はさまざまな状況で使用されることがあります。ただし、この waittype が記録されることが多いのは、SQL Server のインスタンスへの複数の接続からプロシージャ キャッシュに複数のアドホック クエリ プランが短時間で挿入されている場合です。プロシージャ キャッシュへの挿入または削除の必要があるデータを制限することにより、このボトルネックを解消することができます。たとえば、クエリを再利用できるように明示的にクエリのパラメータ化を行ったり、適切な箇所でストアド プロシージャを使用したりします。
SHUTDOWN
0x20A
この waittype は、SPID により SHUTDOWN コマンドが発行され、SPID がアクティブなクエリの完了を待っていることを示します。
WAITFOR
0x20B
この waittype は、Transact-SQL ステートメント WAITFOR DELAY が原因で SPID が休止していることを示します。
NETWORKIO
0x800
この waittype は、SPID が、クライアント アプリケーションでデータがフェッチされ、クライアント アプリケーションにさらに結果を送信できるようになるまで待機していることを示します。

関連情報


関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
244455 SQL Server 7.0 の sysprocesses テーブルの waittype フィールドおよび lastwaittype フィールドの定義
SQL Server 2000 の master.dbo.sysprocesses システム テーブルの関連情報については、以下のマイクロソフト Web サイトを参照してください。
SQL Server 2000 のラッチの関連情報については、以下のマイクロソフト Web サイトを参照してください。