SQL SERVER のロックエスカレーション

SQLSERVERで、大量データを更新する場合に、
行ロックのはずなのにテーブルロックになる場合がある。

BOOK ONLINEによると、
ロックのエスカレーションとは、粒度の小さい多数のロックを変換して、
粒度が大きい少数のロックにする処理です。
この処理により、同時実行の競合が発生する確率は高くなりますが、システムのオーバーヘッドは減少します。

ロックのエスカレーションは、次のいずれかの時点で開始されます。
* 1 つの Transact-SQL ステートメントが単独のテーブルまたはインデックスに対して、少なくとも 5,000 個のロックを獲得したとき。
* データベース エンジンのインスタンスのロック数がメモリまたは構成のしきい値を超えたとき。
ということみたいです。

5000件以上の更新があるトランザクションは5000件単位でトランザクションを分けろってことか・・・
SQLSERVER2005で実験してみます。

      • ロックエスカレーション

USE hoge
GO

    • テーブルの削除

truncate TABLE TESTLOCK

    • テーブルの作成

CREATE TABLE TESTLOCK
(ID int primary key,
data1 varchar(10),
data2 varchar(10))

    • データを追加

DECLARE @i integer
SET @i=0

WHILE(@i < 100000)
BEGIN

INSERT INTO TESTLOCK Values(@i,'NODATA','NODATA')
SET @i = @i + 1

END

    • 件数を取得

select count(*) from TESTLOCK

BEGIN TRAN
UPDATE TESTLOCK SET data1 = N'dataA'
WHERE ID BETWEEN '0' AND '6222';

SELECT COUNT(*) FROM sys.dm_tran_locks
WHERE resource_type <> 'DATABASE';


ROLLBACK

BEGIN TRAN
UPDATE TESTLOCK SET data1 = N'dataA'
WHERE ID BETWEEN '0' AND '6220';

SELECT COUNT(*) FROM sys.dm_tran_locks
WHERE resource_type <> 'DATABASE';

ROLLBACK

①の件数は6246件
②の件数は1件

更新件数が6220件では10回繰り返してもロックエスカレーションは発生しなかった。
更新件数が6221〜6223件では何回かに一回ロックエスカレーションが発生した。
更新件数が6224件では必ずロックエスカレーションが発生した。

環境やテーブルによって変化するようですが、大体このくらいなのかなと思います。


    • ロック詳細確認用SQL

SELECT
resource_type as オブジェクトの種類,
resource_associated_entity_id as エンティティ,
request_mode as ロックの種類,
request_type as 要求の種類,
request_status as 状態
FROM sys.dm_tran_locks
WHERE [resource_type]<>'DATABASE';

    • オブジェクトの確認

SELECT OBJECT_NAME('53575229')

    • オブジェクトの確認

SELECT OBJECT_NAME(Object_id) FROM sys.partitions WHERE hobt_id='72057594038452224'


これを発生させない為には、

別のロックを先に行うといいそうです。

    • 一時間更新ロック

BEGIN TRAN
SELECT * FROM TESTLOCK WITH (UPDLOCK, HOLDLOCK) WHERE 1=0
WAITFOR DELAY '0:10:00'--10分
COMMIT TRAN

その後以下SQLを実行すれば行ロックになります。

BEGIN TRAN
UPDATE TESTLOCK SET data1 = N'dataA'
WHERE ID BETWEEN '0' AND '16224';

SELECT COUNT(*) FROM sys.dm_tran_locks
WHERE resource_type <> 'DATABASE';

ROLLBACK

ロック件数が16290件になり行ロックになっています。

定額給付金

なんかもうどうなっちゃってるの?何もいえません。

政府・与党が追加経済対策の目玉と位置付けている定額給付金について、法律による所得制限は行わないことで合意した。高額所得者には自発的な受け取り辞退を促す方式とする。この種の措置で、受け取る受け取らないを本人に任せることは前代未聞である。

まだ定額減税のほうがましのような気がしますが、
政治家ってやってることが的外れだってことがどうして解らないんでしょうかね??

挙句の果てには給付の所得制限を市町村に任せるとか・・・・

1800万所得がある人は、月収150万か、それでもほしいのかな?
そういう人の気持ちはわかりませんが、もし私だったらもらうw

景気を考えるなら
政策目的が不明確で、効果も疑わしく、財政にも負担をかけるような定額給付金は白紙に戻すべきだ。生活対策というのならば、低所得層などに対象を絞った減税や、大胆な非正規雇用対策を講ずるのが責任ある政治の務めではないのか。

財政を立て直す方法はいまならまだあると思う、
公務員と政治家へらせばいいだけなんだけどね。
わけわかんない特殊法人全部民営化、これでどう?

庶民感覚とか言ってるけど、全然わかってないよ。


待機の種類
説明

ASYNC_DISKPOOL_LOCK

ファイルの作成や初期化などのタスクを実行している並列スレッドを同期しようとすると発生します。

ASYNC_IO_COMPLETION

タスクが I/O の終了を待機しているときに発生します。

ASYNC_NETWORK_IO

ネットワークの書き込みでタスクがブロックされているときに発生します。クライアントがサーバーからのデータを処理しているかどうかを確認してください。

BACKUP


バックアップ処理の一部としてタスクがブロックされているときに発生します。

BACKUP_CLIENTLOCK

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

BACKUP_OPERATOR

タスクがテープのマウントを待機しているときに発生します。テープの状態を表示するには、sys.dm_io_backup_tapes にクエリを実行します。マウント操作が保留中以外のときに、この待機が発生した場合は、テープ ドライブにハードウェア上の問題があると考えられます。

BACKUPBUFFER

バックアップ タスクが、データまたはデータを格納するバッファを待機しているときに発生します。この待機は、タスクがテープのマウントを待機しているとき以外はほとんど発生しません。

BACKUPIO


バックアップ タスクが、データまたはデータを格納するバッファを待機しているときに発生します。この待機は、タスクがテープのマウントを待機しているとき以外はほとんど発生しません。

BACKUPTHREAD

タスクがバックアップ タスクの終了を待機しているときに発生します。待機時間の長さは、数分から数時間に及ぶ場合があります。待機中のタスクが I/O 処理中である場合は、この待機が発生しても問題はありません。

BAD_PAGE_PROCESS

問題があると考えられるバックグラウンドのページ ロガーが、5 秒間隔より頻繁な実行を回避しようとする場合に発生します。問題があると考えられるページが多くある場合、ロガーは頻繁に実行されます。

BROKER_CONNECTION_RECEIVE_TASK

接続エンドポイントでメッセージを受信するためアクセスを待機しているときに発生します。エンドポイントへの受信アクセスはシリアル化されます。

BROKER_ENDPOINT_STATE_MUTEX

Service Broker 接続エンドポイントの状態へのアクセスが競合しているときに発生します。変更の状態へのアクセスはシリアル化されます。


BROKER_EVENTHANDLER

タスクが Service Broker のプライマリ イベント ハンドラを待機しているときに発生します。この待機は、非常に短い時間の待機です。

BROKER_INIT

各アクティブ データベースで Service Broker を初期化するときに発生します。この待機は、発生頻度の低い待機です。

BROKER_MASTERSTART

タスクが Service Broker のプライマリ イベント ハンドラの起動を待機しているときに発生します。この待機は、非常に短い時間の待機です。

BROKER_RECEIVE_WAITFOR

RECEIVE WAITFOR が待機しているときに発生します。これは、メッセージの受信準備ができていない場合によく起こります。


BROKER_REGISTERALLENDPOINTS

Service Broker の接続エンドポイントの初期化中に発生します。この待機は、非常に短い時間の待機です。

BROKER_SHUTDOWN

Service Broker のシャットダウンが予定されている場合に発生します。この待機は、非常に短い時間の待機です。

BROKER_TRANSMITTER

Service Broker 送信機能が作業を待機しているときに発生します。

BUILTIN_HASHKEY_MUTEX

この待機はインスタンスの起動後、内部データ構造の初期化中に発生することがあります。データ構造が初期化されてから再発生することはありません。

CHECKPOINT_QUEUE


チェックポイント タスクが、次のチェックポイント要求を待機しているときに発生します。

CHKPT

サーバー起動時に発生し、チェックポイント スレッドに開始できることを伝えます。

CLR_AUTO_EVENT

タスクが共通言語ランタイム (CLR) を実行中で、特定の自動イベントが開始されるのを待機しているときに発生します。待機は長時間になることが一般的で、問題はありません。

CLR_CRST

タスクが CLR を実行中で、重大なセクションが別のタスクによって現在使用されている場合、そのセクションを待機しているときに発生します。

CLR_JOIN


タスクが CLR を実行中で、別のタスクの終了を待機しているときに発生します。また、この待機状態は、タスク間の結合があるときに発生します。

CLR_MANUAL_EVENT

タスクが CLR を実行中で、特定の手動イベントが開始されるのを待機しているときに発生します。

CLR_MONITOR

タスクが CLR を実行中で、ロックの取得をモニタで待機しているときに発生します。

CLR_RWLOCK_READER

タスクが CLR を実行中で、リーダー ロックを待機しているときに発生します。

CLR_RWLOCK_WRITER

タスクが CLR を実行中で、ライタ ロックを待機しているときに発生します。


CLR_SEMAPHORE

タスクが CLR を実行中で、セマフォを待機しているときに発生します。

CLR_TASK_START

CLR タスクが完全に開始されるのを待機しているときに発生します。

CMEMTHREAD

タスクがスレッド セーフ メモリ オブジェクトで待機しているときに発生します。複数のタスクが同じメモリ オブジェクトからメモリを割り当てようとして競合が発生している場合、待機時間は長くなる可能性があります。

CURSOR

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。


CURSOR_ASYNC

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

CXPACKET

クエリ プロセッサ交換反復子を同期しようとするときに発生します。この待機で競合が発生すると問題になる場合は、並列処理の次数を下げることを検討してください。

DBMIRROR_DBM_EVENT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

DBMIRROR_DBM_MUTEX

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

DBMIRROR_EVENTS_QUEUE


データベース ミラーリングがイベントの処理を待機しているときに発生します。

DBMIRROR_SEND

タスクが、ネットワーク層の通信バックログが消去されメッセージ送信できるようになるのを待機しているときに発生します。通信層が過負荷になり、データベース ミラーリング データのスループットに影響が生じ始めていることを表します。

DBMIRROR_WORKER_QUEUE

データベース ミラーリング ワーカー タスクが、次の作業の実行を待機していることを表します。

DBMIRRORING_CMD

タスクが、ログ レコードのディスクへのフラッシュを待機しているときに発生します。この待機状態は、長時間続くことが予想されます。

DBTABLE


単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

DEADLOCK_ENUM_MUTEX

SQL Server で同時に複数のデッドロック検索が実行されていないかどうかを、デッドロック モニタと sys.dm_os_waiting_tasks が確認しようとするときに発生します。

DEADLOCK_TASK_SEARCH

このリソースでの待機時間が長い場合は、サーバーが sys.dm_os_waiting_tasks 上で複数のクエリを実行したことにより、デッドロックモニタでデッドロック検索を実行できなくなっていることを表します。この待機の種類は、デッドロックモニタにのみ使用されます。sys.dm_os_waiting_tasks の上部のクエリは、DEADLOCK_ENUM_MUTEX を使用します。

DEBUG

Transact-SQLCLR が内部同期のためデバッグしているときに発生します。

DISABLE_VERSIONING

一番最初のアクティブなトランザクションのタイムスタンプが、状態が変化し始めたときのタイムスタンプより後かどうかを確認するために、SQL Server がバージョン トランザクションマネージャをポーリングしたときに発生します。最初のトランザクションのタイムスタンプが状態変化のタイムスタンプより後の場合、ALTER DATABASE ステートメントの実行前に開始されたスナップショット トランザクションはすべて終了しています。この待機状態は、SQL Server が ALTER DATABASE ステートメントを使用してバージョン管理を無効にするときに使用されます。


DISKIO_SUSPEND

外部バックアップがアクティブで、タスクがファイルへのアクセスを待機しているときに発生します。これは、ユーザープロセスの待機が発生するたびに報告されます。1 つのユーザー プロセスの待機が 5 回を超えた場合は、外部バックアップの完了に時間がかかりすぎている可能性があります。

DLL_LOADING_MUTEX

XML パーサー DLL が読み込まれるのを待機しているときに 1 回発生します。

DROPTEMP

一時オブジェクトの削除を試行して失敗した場合に、次の削除を試行するまでの間に発生します。この待機時間は、削除の試行が失敗するたびに指数関数的に増えます。

DTC

タスクが、状態遷移の管理に使用されるイベントで待機しているときに発生します。この待機状態によって、Microsoft 分散トランザクションコーディネータ (MS DTC) サービスが使用できなくなったという通知を SQL Server で受信した後で、MS DTC トランザクションの復旧が発生するタイミングが制御されます。


また、この待機状態によって、SQL Server が MS DTC トランザクションのコミットを開始するときに待機中になっているタスクを把握することができます。さらに、SQL Server が MS DTC のコミットの終了を待機しているときに待機中になっているタスクも把握することができます。

DTC_ABORT_REQUEST

MS DTC ワーカー セッションが、MS DTC トランザクションの所有権取得を待機しているときに発生します。MS DTC がトランザクションの所有権を取得した後、セッションはそのトランザクションロールバックできます。一般に、セッションが待機するのは、そのトランザクションが別のセッションで使用されている場合です。

DTC_RESOLVE

複数のデータベースにまたがるトランザクションで、復旧タスクが、トランザクションの結果をクエリするため master データベースを待機しているときに発生します。

DTC_STATE

内部の MS DTC グローバル状態オブジェクトに対する変更を保護するイベントで、タスクが待機しているときに発生します。この待機状態は非常に短い時間保持されます。

DTC_TMDOWN_REQUEST

MS DTC ワーカー セッションで、MS DTC サービスが使用できないという通知を SQL Server が受信したときに発生します。ワーカーはまず MS DTC 復旧プロセスの開始を待機し、次に、ワーカーが操作している分散トランザクションの結果取得を待機します。この待機は、MS DTC サービスとの接続が再度確立されるまで継続される場合があります。


DTC_WAITFOR_OUTCOME

MS DTC がアクティブになり、準備されたトランザクションの解決が可能になるのを、復旧タスクが待機しているときに発生します。

DUMP_LOG_COORDINATOR

メイン タスクが、サブタスクによるデータ生成を待機しているときに発生します。通常、この待機状態は発生しません。待機が長時間になる場合は、予期しないブロックが発生している可能性があり、サブタスクを調査する必要があります。

EC

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

EE_PMOLOCK

ステートメントの実行時、特定の種類のメモリ割り当てを同期するときに発生します。


EE_SPECPROC_MAP_INIT

内部プロシージャ ハッシュ テーブルの作成における同期中に発生します。この待機は、SQL Server インスタンスの開始後、ハッシュ テーブルに最初にアクセスするときにのみ発生します。

ENABLE_VERSIONING

データベースがスナップショット分離が許可されている状態に移行できることを宣言するために、SQL Server が、このデータベースにおけるすべての更新トランザクションの終了を待機しているときに発生します。この待機状態は、SQL Server が ALTER DATABASE ステートメントを使用してスナップショット分離を有効にするときに使用されます。

ERROR_REPORTING_MANAGER

複数のエラー ログの初期化における同期中に発生します。

EXCHANGE

並列クエリの実行時、クエリ プロセッサ交換反復子での同期中に発生します。

EXECSYNC


並列クエリの実行時、交換反復子に関係のない領域での、クエリ プロセッサによる同期中に発生します。このような領域の例としては、ビットマップ、ラージバイナリ オブジェクト (LOB)、スプール反復子などがあります。LOB では、この待機状態が頻繁に使用されることがあります。

FAILPOINT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

FCB_REPLICA_READ

スナップショット (または DBCC によって作成された一時スナップショット) のスパース ファイルの読み取りを同期するときに発生します。

FCB_REPLICA_WRITE

スナップショット (または DBCC によって作成された一時スナップショット) のスパース ファイルに対するページのプッシュまたはプルを同期するときに発生します。

FT_RESTART_CRAWL


一時的なエラーから復旧するために、正常と認識されている最後の時点からフルテキスト クロールを再開する必要があるときに発生します。この待機が発生した場合、設定を現在処理中のワーカー タスクは、完了するか現在のステップを終了することを許可されます。

FT_RESUME_CRAWL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

FULLTEXT GATHERER

フルテキスト操作の同期中に発生します。

HTTP_ENDPOINT_COLLCREATE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

HTTP_ENUMERATION

起動時に発生し、HTTP を開始するため HTTP エンドポイントを列挙します。


HTTP_START

接続が HTTP の初期化完了を待機しているときに発生します。

IMP_IMPORT_MUTEX

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

IMPPROV_IOWAIT

SQL Server が、一括読み込み I/O の終了を待機しているときに発生します。

INDEX_USAGE_STATS_MUTEX

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。


IO_AUDIT_MUTEX

トレース イベント バッファの同期中に発生します。

IO_COMPLETION

I/O 操作の完了を待機しているときに発生します。この待機の種類は通常、データ ページ以外の I/O を表します。データ ページ I/O の完了の待機は、PAGEIOLATCH_* の待機として表示されます。

KSOURCE_WAKEUP

サービス コントロール タスクによって、サービス コントロール マネージャからの要求を待機しているときに使用されます。待機は長時間になることが予想されますが、問題はありません。

KTM_ENLISTMENT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

KTM_RECOVERY_MANAGER


単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

KTM_RECOVERY_RESOLUTION

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

LATCH_DT

DT (破棄) ラッチを待機しているときに発生します。これには、バッファ ラッチまたはトランザクション マーク ラッチは含まれません。LATCH_* 待機の一覧は、sys.dm_os_latch_stats で確認できます。sys.dm_os_latch_stats では、LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX、および LATCH_DT の待機はグループ化されます。

LATCH_EX

EX (排他) ラッチを待機しているときに発生します。これには、バッファ ラッチまたはトランザクション マーク ラッチは含まれません。LATCH_* 待機の一覧は、sys.dm_os_latch_stats で確認できます。sys.dm_os_latch_stats では、LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX、および LATCH_DT の待機はグループ化されます。

LATCH_KP


KP (保持) ラッチを待機しているときに発生します。これには、バッファ ラッチまたはトランザクション マーク ラッチは含まれません。LATCH_* 待機の一覧は、sys.dm_os_latch_stats で確認できます。sys.dm_os_latch_stats では、LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX、および LATCH_DT の待機はグループ化されます。

LATCH_NL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

LATCH_SH

SH (共有) ラッチを待機しているときに発生します。これには、バッファ ラッチまたはトランザクション マーク ラッチは含まれません。LATCH_* 待機の一覧は、sys.dm_os_latch_stats で確認できます。sys.dm_os_latch_stats では、LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX、および LATCH_DT の待機はグループ化されます。

LATCH_UP

UP (更新) ラッチを待機しているときに発生します。これには、バッファ ラッチまたはトランザクション マーク ラッチは含まれません。LATCH_* 待機の一覧は、sys.dm_os_latch_stats で確認できます。sys.dm_os_latch_stats では、LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX、および LATCH_DT の待機はグループ化されます。

LAZYWRITER_SLEEP

レイジー ライタ タスクが一時中断されるときに発生します。待機中のバックグラウンド タスクで費やされた時間を測定することができます。ユーザーの機能停止を検索しているときには、この待機状態は考慮しないでください。


LCK_M_BU

タスクが一括更新 (BU) ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_IS

タスクがインテント共有 (IS) ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_IU

タスクがインテント更新 (IU) ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_IX

タスクがインテント排他 (IX) ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。


LCK_M_RIn_NL

タスクが、現在のキー値に対する NULL ロックの取得、および現在のキーから以前のキーまでを対象とした挿入範囲ロックの取得を待機しているときに発生します。キーの NULL ロックは、すぐに解放されるロックです。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RIn_S

タスクが、現在のキー値に対する共有ロックの取得、および現在のキーから以前のキーまでを対象とした挿入範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RIn_U

タスクが、現在のキー値に対する更新ロックの取得、および現在のキーから以前のキーまでを対象とした挿入範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RIn_X

タスクが、現在のキー値に対する排他ロックの取得、および現在のキーから以前のキーまでを対象とした挿入範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RS_S


タスクが、現在のキー値に対する共有ロックの取得、および現在のキーから以前のキーまでを対象とした共有範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RS_U

タスクが、現在のキー値に対する更新ロックの取得、および現在のキーから以前のキーまでを対象とした更新範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RX_S

タスクが、現在のキー値に対する共有ロックの取得、および現在のキーから以前のキーまでを対象とした排他範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RX_U

タスクが、現在のキー値に対する更新ロックの取得、および現在のキーから以前のキーまでを対象とした排他範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_RX_X


タスクが、現在のキー値に対する排他ロックの取得、および現在のキーから以前のキーまでを対象とした排他範囲ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_S

タスクが共有ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_SCH_M

タスクがスキーマ変更ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_SCH_S

タスクがスキーマ共有ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_SIU

タスクがインテント更新付き共有ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。


LCK_M_SIX

タスクがインテント排他付き共有ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_U

タスクが更新ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_UIX

タスクがインテント排他付き更新ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。

LCK_M_X

タスクが排他ロックの取得を待機しているときに発生します。ロックの互換性のマトリックスについては、「sys.dm_tran_locks (Transact-SQL)」を参照してください。


LOGBUFFER

タスクが、ログ レコードを格納するログ バッファの領域を待機しているときに発生します。常に高い値が示される場合は、ログ デバイスで解放される領域よりも、サーバーにより生成されるログ サイズが大きいことを表しています。

LOGMGR

データベースを閉じる間、タスクが、ログのシャットダウン前に未処理のログ I/O が終了するのを待機しているときに発生します。

LOGMGR_FLUSH

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

LOGMGR_QUEUE

ログ ライタ タスクが作業要求を待機しているときに発生します。

LOGMGR_RESERVE_APPEND


新しいログ レコードを書き込むために、タスクが、ログの切り捨てによるログ領域の解放の確認を待機しているときに発生します。この待機を短縮すると、影響を受けるデータベースのログ ファイル サイズが増えることに注意してください。

LOWFAIL_MEMMGR_QUEUE

メモリが使用可能になるのを待機しているときに発生します。

MIRROR_SEND_MESSAGE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

MISCELLANEOUS

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

MSQL_DQ


タスクが分散クエリ操作の終了を待機しているときに発生します。これは、複数のアクティブな結果セット (MARS) アプリケーションにデッドロックの可能性があるかどうかを検出するために使用されます。分散クエリ呼び出しが終了すると、待機は終了します。

MSQL_SYNC_PIPE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

MSQL_XACT_MGR_MUTEX

タスクが、セッション レベル トランザクション操作を実行するために、セッション トランザクション マネージャの所有権の取得を待機しているときに発生します。

MSQL_XACT_MUTEX

トランザクション使用の同期中に発生します。要求でトランザクションを使用するには、まずミューテックスを取得する必要があります。

MSQL_XP

タスクが、拡張ストアド プロシージャの終了を待機しているときに発生します。SQL Server では、この待機状態を使用して、MARS アプリケーションにデッドロックの可能性があるかどうかを検出します。拡張ストアド プロシージャの呼び出しが終了すると、待機は終了します。


MSSEARCH

フルテキスト検索の呼び出し中に発生します。フルテキスト操作が完了すると、待機は終了します。この待機はフルテキスト操作の競合ではなく、操作時間を表します。

NET_WAITFOR_PACKET

ネットワークの読み取り中に、接続がネットワーク パケットを待機しているときに発生します。

OLEDB

SQL ServerSQL Server Native Client OLE DB プロバイダを呼び出すときに発生します。この種類の待機は、同期では使用されません。代わりに、OLE DB プロバイダ呼び出しの持続時間を示します。

ONDEMAND_TASK_QUEUE

バックグラウンド タスクが、優先度の高いシステム タスクの要求を待機しているときに発生します。待機時間が長い場合は処理優先度が高い要求がないことを示します。問題があるわけではありません。


PAGEIOLATCH_DT

タスクが、I/O 要求内のバッファ ラッチで待機しているときに発生します。ラッチ要求は破棄モードです。待機時間が長い場合、ディスク サブシステムに問題がある可能性があります。

PAGEIOLATCH_EX

タスクが、I/O 要求内のバッファ ラッチで待機しているときに発生します。ラッチ要求は排他モードです。待機時間が長い場合、ディスク サブシステムに問題がある可能性があります。

PAGEIOLATCH_KP

タスクが、I/O 要求内のバッファ ラッチで待機しているときに発生します。ラッチ要求は保持モードです。待機時間が長い場合、ディスク サブシステムに問題がある可能性があります。

PAGEIOLATCH_NL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

PAGEIOLATCH_SH


タスクが、I/O 要求内のバッファ ラッチで待機しているときに発生します。ラッチ要求は共有モードです。待機時間が長い場合、ディスク サブシステムに問題がある可能性があります。

PAGEIOLATCH_UP

タスクが、I/O 要求内のバッファ ラッチで待機しているときに発生します。ラッチ要求は更新モードです。待機時間が長い場合、ディスク サブシステムに問題がある可能性があります。

PAGELATCH_DT

タスクが、I/O 要求内にないバッファ ラッチで待機しているときに発生します。ラッチ要求は破棄モードです。

PAGELATCH_EX

タスクが、I/O 要求内にないバッファ ラッチで待機しているときに発生します。ラッチ要求は排他モードです。

PAGELATCH_KP


タスクが、I/O 要求内にないバッファ ラッチで待機しているときに発生します。ラッチ要求は保持モードです。

PAGELATCH_NL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

PAGELATCH_SH

タスクが、I/O 要求内にないバッファ ラッチで待機しているときに発生します。ラッチ要求は共有モードです。

PAGELATCH_UP

タスクが、I/O 要求内にないバッファ ラッチで待機しているときに発生します。ラッチ要求は更新モードです。

PARALLEL_BACKUP_QUEUE

RESTORE HEADERONLY、RESTORE FILELISTONLY、または RESTORE LABELONLY によって生成された出力をシリアル化しているときに発生します。


PRINT_ROLLBACK_PROGRESS

ALTER DATABASE 終了句を使って遷移されたデータベースで、ユーザー プロセスが終了するのを待機する場合に使用されます。詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

QNMANAGER_ACQUIRE

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

QPJOB_KILL

非同期自動統計更新が実行開始されたときに、強制終了呼び出しにより操作がキャンセルされたことを示します。終了スレッドは一時中断され、強制終了コマンドの受信開始を待機します。1 秒未満であれば問題はありません。

QPJOB_WAITFOR_ABORT

非同期自動統計更新の実行中に、強制終了の呼び出しにより操作がキャンセルされたことを示します。更新は現在完了していますが、終了スレッドメッセージ調整が完了するまでは一時中断されます。これは通常の状態ですが、発生することはほとんどありません。発生しても非常に短い時間です。1 秒未満であれば問題はありません。


QRY_MEM_GRANT_INFO_MUTEX

クエリ実行メモリ管理が、静的な許可情報リストへのアクセスを制御しようとするときに発生します。この待機状態では、現在許可されており待機中のメモリ要求に関する情報が一覧表示されます。またこの状態は、単純なアクセス制御状態です。この状態では、長時間に及ぶ待機は避けてください。このミューテックスが解放されない場合、新しいメモリを使用するすべてのクエリは応答を停止します。

QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN

オフラインでのインデックス作成が並列実行される場合、並べ替えを行っている複数のワーカー スレッドが並べ替えファイルへのアクセスを同期するときに発生する場合があります。

QUERY_NOTIFICATION_MGR_MUTEX

クエリ通知マネージャ内のガベージ コレクション キューの同期中に発生します。

QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX

クエリ通知内のトランザクションの状態の同期中に発生します。

QUERY_NOTIFICATION_TABLE_MGR_MUTEX


クエリ通知マネージャ内での内部同期中に発生します。

QUERY_NOTIFICATION_UNITTEST_MUTEX

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

QUERY_OPTIMIZER_PRINT_MUTEX

クエリ オプティマイザ診断の出力作成の同期中に発生します。この待機は、Microsoft 製品サポートの指示により、診断設定を有効にしている場合にのみ発生します。

QUERY_TRACEOUT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

RECOVER_CHANGEDB


ウォーム スタンバイ データベース内で、データベースの状態の同期中に発生します。

RG_RECONFIG

ALTER RESOURCE GOVERNOR RECONFIGURE または ALTER RESOURCE GOVERNOR DISABLE が呼び出されたときに発生します。

REPL_CACHE_ACCESS

レプリケーション アーティクル キャッシュでの同期中に発生します。この待機中、レプリケーション ログ リーダーは停止し、パブリッシュされたテーブルに対するデータ定義言語 (DDL) ステートメントはブロックされます。

REPL_SCHEMA_ACCESS

レプリケーション スキーマのバージョン情報の同期中に発生します。この状態は、レプリケートされたオブジェクトで DDL ステートメントが実行されるとき、および、ログ リーダーが DDL の発生に基づいてバージョン管理されたスキーマを作成または使用するときに発生します。

REPLICA_WRITES

タスクが、データベース スナップショットまたは DBCC レプリカへのページ書き込みの完了を待機しているときに発生します。


REQUEST_DISPENSER_PAUSE

タスクが、未処理の I/O がすべて完了しスナップショット バックアップ用にファイルの I/O が固定されるのを待機しているときに発生します。

REQUEST_FOR_DEADLOCK_SEARCH

デッドロック モニタが、次のデッドロック検索の開始を待機しているときに発生します。この待機は、デッドロックが検出されてから次に検出されるまでの間に発生することが予想されます。このリソースにおける合計待機時間が長くても問題はありません。

RESMGR_THROTTLED

新しい要求が着信し、GROUP_MAX_REQUESTS 設定に基づいて絞り込まれたときに発生します。

RESOURCE_QUEUE

さまざまな内部リソース キューの同期中に発生します。


RESOURCE_SEMAPHORE

他の同時実行クエリがあるため、クエリ メモリの要求がすぐに許可されない場合に発生します。待機および待機時間が高い値を示している場合は、同時実行クエリの数が多すぎるか、またはメモリ要求の数が多すぎる可能性があります。

RESOURCE_SEMAPHORE_MUTEX

クエリが、スレッドを予約するための要求を待機しているときに発生します。この待機は、クエリのコンパイルとメモリの要求許可を同期しているときにも発生します。

RESOURCE_SEMAPHORE_QUERY_COMPILE

コンパイルされる同時実行クエリの数が、スロットルの制限値に達したときに発生します。待機および待機時間が高い値を示している場合は、コンパイル、再コンパイル、またはキャッシュできないプランの数が多すぎる可能性があります。

RESOURCE_SEMAPHORE_SMALL_QUERY

他の同時実行クエリがあるため、サイズの小さいクエリからのメモリ要求がすぐに許可されない場合に発生します。待機時間は数秒以内である必要があります。要求したメモリが数秒以内に許可されないと、サーバーによって要求がメイン クエリのメモリプールに転送されます。待機が高い値を示している場合は、待機クエリによって主要なメモリプールがブロックされているときに、サイズの小さい同時実行クエリの数が多すぎる可能性があります。

SEC_DROP_TEMP_KEY


一時セキュリティ キーを削除しようとして失敗した後、再試行するまでの間に発生します。

SERVER_IDLE_CHECK

SQL Server インスタンスのアイドル状態を同期している間に、リソース モニタが SQL Server インスタンスをアイドルとして宣言しようとするとき、または起動しようとするときに発生します。

SHUTDOWN

シャットダウン ステートメントが、アクティブな接続の終了を待機しているときに発生します。

SLEEP_BPOOL_FLUSH

ディスク サブシステムが飽和状態にならないよう、チェックポイントで新しい I/O の実行をスロットル中に発生します。

SLEEP_DBSTARTUP


すべてのデータベースが復旧するのを待機している間、データベースの起動中に発生します。

SLEEP_DCOMSTARTUP

DCOM の初期化が完了するのを待機している間、SQL Server インスタンスの起動中に、多くても 1 回だけ発生します。

SLEEP_MSDBSTARTUP

SQL トレースが msdb データベースの起動完了を待機しているときに発生します。

SLEEP_SYSTEMTASK

tempdb の起動完了を待機している間、バックグラウンド タスクの開始中に発生します。

SLEEP_TASK

汎用イベントの発生を待機している間、タスクがスリープ状態のときに発生します。


SLEEP_TEMPDBSTARTUP

タスクが、tempdb の開始完了を待機しているときに発生します。

SNI_CRITICAL_SECTION

SQL Server ネットワーク コンポーネント内での内部同期中に発生します。

SNI_HTTP_ACCEPT

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

SNI_HTTP_WAITFOR_0_DISCON

SQL Server のシャットダウン中、未完了の HTTP 接続が終了するのを待機している間に発生します。


SOAP_READ

HTTP ネットワークの読み取り完了を待機しているときに発生します。

SOAP_WRITE

HTTP ネットワークの書き込み完了を待機しているときに発生します。

SOS_CALLBACK_REMOVAL

コールバックを削除するために、コールバックの一覧で同期を実行しているときに発生します。サーバーの初期化が完了した後、通常この待機カウンタが変更されることはありません。

SOS_LOCALALLOCATORLIST

SQL Server メモリ マネージャ内での内部同期中に発生します。

SOS_MEMORY_USAGE_ADJUSTMENT


プール間でメモリ使用量が調整されている場合に発生します。

SOS_OBJECT_STORE_DESTROY_MUTEX

メモリ プールからオブジェクトを破棄するときに、メモリ プール内での内部同期中に発生します。

SOS_PROCESS_AFFINITY_MUTEX

関係設定を処理するためのアクセスの同期中に発生します。

SOS_RESERVEDMEMBLOCKLIST

SQL Server メモリ マネージャ内での内部同期中に発生します。

SOS_SCHEDULER_YIELD


タスクが、他のタスクの実行にスケジューラを自主的に解放したときに発生します。この待機中、タスクはクォンタムの更新を待機しています。

SOS_STACKSTORE_INIT_MUTEX

内部ストアの初期化の同期中に発生します。

SOS_SYNC_TASK_ENQUEUE_EVENT

タスクが同期して開始したときに発生します。SQL Server のほとんどのタスクは非同期で開始し、タスクの要求が作業キューに挿入されるとすぐ制御が最初に戻ります。

SOS_VIRTUALMEMORY_LOW

メモリ割り当てが、リソース マネージャによる仮想メモリの解放を待機しているときに発生します。

SOSHOST_EVENT

CLR などのホストされるコンポーネントが、SQL Server イベント同期オブジェクト上で待機しているときに発生します。


SOSHOST_INTERNAL

CLR などのホストされるコンポーネントで使用される、メモリ マネージャのコールバックの同期中に発生します。

SOSHOST_MUTEX

CLR などのホストされるコンポーネントが、SQL Server ミューテックス同期オブジェクト上で待機しているときに発生します。

SOSHOST_RWLOCK

CLR などのホストされるコンポーネントが、SQL Server リーダー/ライタ同期オブジェクト上で待機しているときに発生します。

SOSHOST_SEMAPHORE

CLR などのホストされるコンポーネントが、SQL Server セマフォ同期オブジェクト上で待機しているときに発生します。


SOSHOST_SLEEP

汎用イベントの発生を待機している間、ホストされるタスクがスリープ状態のときに発生します。ホストされるタスクは、CLR などのホストされるコンポーネントで使用されます。

SOSHOST_TRACELOCK

ストリームをトレースするためのアクセスの同期中に発生します。

SOSHOST_WAITFORDONE

CLR などのホストされるコンポーネントが、タスクの完了を待機しているときに発生します。

SQLCLR_APPDOMAIN

CLR が、アプリケーション ドメインの起動完了を待機しているときに発生します。

SQLCLR_ASSEMBLY


アプリケーション ドメインに読み込まれたアセンブリ一覧へのアクセスを待機しているときに発生します。

SQLCLR_DEADLOCK_DETECTION

CLRデッドロック検出の完了を待機しているときに発生します。

SQLCLR_QUANTUM_PUNISHMENT

クォンタムの実行時間を超えたことが原因で、CLR タスクがスロットルされたときに発生します。このスロットルは、こうしたリソース消費の多いタスクによる他のタスクへの影響を軽減するために行われます。

SQLSORT_NORMMUTEX

内部同期中、内部の並べ替え構造が初期化される間に発生します。

SQLSORT_SORTMUTEX


内部同期中、内部の並べ替え構造が初期化される間に発生します。

SQLTRACE_BUFFER_FLUSH

タスクが、バックグラウンド タスクによってトレース バッファが 4 秒ごとにディスクにフラッシュされるのを待機しているときに発生します。

SQLTRACE_LOCK

ファイルのトレース中、トレース バッファの同期中に発生します。

SQLTRACE_SHUTDOWN

トレースのシャットダウンが、未処理のトレース イベントが完了するのを待機しているときに発生します。

SQLTRACE_WAIT_ENTRIES

SQL トレース イベント キューが、パケットの到着を待機しているときに発生します。


SRVPROC_SHUTDOWN

シャットダウン プロセスが、正常にシャットダウンするために内部リソースの解放を待機しているときに発生します。

TEMPOBJ

一時オブジェクトの削除が同期されるときに発生します。この待機が発生するのはまれで、タスクが temp テーブルに対して削除操作を行うための排他アクセスを要求した場合にのみ発生します。

THREADPOOL

タスクがワーカーの実行を待機しているときに発生します。ワーカー数の最大設定値が低すぎるか、バッチ実行時間が長すぎるため、他のバッチ用にワーカー数が削減されている可能性があります。

TRACEWRITE

SQL トレースの行セット トレース プロバイダが、空きバッファまたは処理するイベントを含むバッファのいずれかを待機しているときに発生します。


TRAN_MARKLATCH_DT

トランザクション マーク ラッチで破棄モードのラッチを待機しているときに発生します。トランザクション マーク ラッチは、マークされたトランザクションでのコミットの同期に使用されます。

TRAN_MARKLATCH_EX

マークされたトランザクションで排他モードのラッチを待機しているときに発生します。トランザクション マーク ラッチは、マークされたトランザクションでのコミットの同期に使用されます。

TRAN_MARKLATCH_KP

マークされたトランザクションで保持モードのラッチを待機しているときに発生します。トランザクション マーク ラッチは、マークされたトランザクションでのコミットの同期に使用されます。

TRAN_MARKLATCH_NL

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

TRAN_MARKLATCH_SH


マークされたトランザクションで共有モードのラッチを待機しているときに発生します。トランザクション マーク ラッチは、マークされたトランザクションでのコミットの同期に使用されます。

TRAN_MARKLATCH_UP

マークされたトランザクションで更新モードのラッチを待機しているときに発生します。トランザクション マーク ラッチは、マークされたトランザクションでのコミットの同期に使用されます。

TRANSACTION_MUTEX

複数のバッチによるトランザクションへのアクセスの同期中に発生します。

UTIL_PAGE_ALLOC

トランザクション ログのスキャンが、メモリに負荷がかかっている間に、使用できるメモリを待機しているときに発生します。

VIEW_DEFINITION_MUTEX


キャッシュされたビュー定義へのアクセスの同期中に発生します。

WAIT_FOR_RESULTS

クエリ通知が行われるのを待機しているときに発生します。

WAITFOR

WAITFOR Transact-SQL ステートメントの結果として発生します。この待機時間は、ステートメントに渡すパラメータによって決まります。この待機はユーザーによって開始されるものです。

WAITSTAT_MUTEX

sys.dm_os_wait_stats の設定に使用する統計コレクションへのアクセスの同期中に発生します。

WORKTBL_DROP

作業テーブルの削除が失敗してから、再試行されるまで一時停止しているときに発生します。


WRITELOG

ログ フラッシュの完了を待機しているときに発生します。ログ フラッシュの原因となる主な操作としては、チェックポイントとトランザクションのコミットがあります。

XACT_OWN_TRANSACTION

トランザクションの所有権取得を待機しているときに発生します。

XACT_RECLAIM_SESSION

セッションの現在の所有者がその所有権を解放するのを待機しているときに発生します。

XACTLOCKINFO

トランザクションのロック一覧へのアクセスの同期中に発生します。このロック一覧には、トランザクション自体だけでなく、ページ分割時にデッドロック検出やロック移行などの操作からもアクセスが行われます。


XACTWORKSPACE_MUTEX

トランザクションからの参加解除や、トランザクションの参加メンバ間におけるデータベース ロック数の同期中に発生します。