SELECT NOLOCK を使用したクエリ SCH-S が必要です。 (スキーマの安定性) テーブルのロック (ヒープ hobt も必要です ロック
)。
さらに SELECT の前に SQL Server は、ステートメントの計画をコンパイルする必要があります。これには、SCH-S を取ることも必要です。 テーブルにロックアウトしてください。
長時間実行されるトランザクションが SELECT ... INTO を介してテーブルを作成すると、 互換性のない SCH-M を保持しています ステートメントが完了するまでロックします。
sys.dm_os_waiting_tasks を調べると、これを確認できます。 その間 その間 ブロッキング期間中。
1つの接続で次のことを試したとき
BEGIN TRAN SELECT * INTO NewT FROM master..spt_values /*Remember to rollback/commit this later*/プレ>そして、実行します (または単に推定実行計画を表示しようとします)
SELECT * FROM NewT WITH (NOLOCK)プレ>すぐに読み取りクエリがブロックされました。
SELECT wait_type, resource_description FROM sys.dm_os_waiting_tasks WHERE session_id = <spid_of_waiting_task>プレ>待機タイプが確かに
SCH_Sであることを示します ブロッキング リソースSCH-Mwait_type resource_description ---------------- ------------------------------------------------------------------------------------------------------------------------------- LCK_M_SCH_S objectlock lockPartition=0 objid=461960722 subresource=FULL dbid=1 id=lock4a8a540 mode=Sch-M associatedObjectId=461960722プレ>