2011-09-15 4 views
4

SQL Server 2008の特定のテーブルに対してロックされている行を確認する方法はありますか?私はまた、それらをロックしているユーザーを知りたいです。特定のテーブルに対してロックされている行と、SQL Serverでロックしているユーザーを確認します。

+0

[テーブルに保持されているロックを確認する方法](http://stackoverflow.com/questions/694581/how-to-check-which-locks-are-held-on-a-table ) – Oded

+0

私はそれを見ましたが、ロックされている特定のレコードをどのように取得するのかと不思議に思っていました。 –

+0

@ジェフ:あなたはあなたの質問に自由に編集できます。 –

答えて

6

sys.dm_tran_locksは、すでに694581で述べられています。どの行が実際にロックされているかを確認するには、ロック階層(table-> rowset-> page-> row)を理解し、ロックリソースの記述を解読する必要があります。テーブルロックの場合、オブジェクトIDはsys.objects、ローセットはpartition_idがsys.partitions、ページが実際のページIDです。行の場合は、ヒープかbtreeかによって異なりますが、(文書化されていない)%%lockres%%仮想列を使用して行を見つけることができます。これが単純すぎる場合は、指定された範囲内のすべての行に影響するため、range locksも考慮する必要があります。

物理階層をナビゲートする際の難しさ、特にページロックが関係するときに、ロックの複雑なモデルcompatibility matrixを追加すると、複雑さがhash collisionsで追加され、探しているロックのペースが考慮されます変更に際して、私はあなたが非常におおよその近似を行うことができます。具体的な問題調査のほかに、これを掘り下げることはほとんどありません。私は積み重ねられたロックを積極的に見て、のような情報をもとに、アプリケーションを聞いてびっくりするだろう。

関連する問題