sp_lock (Transact-SQL)
ロックに関する情報をレポートします。
重要 |
---|
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。 新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。SQL Server データベース エンジンでのロックに関する情報を取得するには、sys.dm_tran_locks 動的管理ビューを使用してください。 |
構文
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
引数
[ @spid1 = ] 'session ID1'
ロック情報が必要とされる、データベース エンジンのセッション ID (SQL Server 2000 以前は SPID) の番号です。sys.dm_exec_sessions から取得します。session ID1 のデータ型は int で、既定値は NULL です。セッションに関するプロセス情報を取得するには、sp_who を実行します。session ID1 を指定しない場合は、すべてのロックに関する情報が表示されます。[ @spid2 = ] 'session ID2'
session ID1 と同時にロックを保持している可能性があり、情報が必要とされる、もう 1 つのデータベース エンジンのセッション ID 番号です。sys.dm_exec_sessions から取得します。session ID2 のデータ型は int で、既定値は NULL です。
リターン コードの値
成功した場合は 0 を返します。
結果セット
sp_lock の結果セットには、@spid1 パラメータと @spid2 パラメータで指定したセッションによって保持されているロックごとに 1 行のデータが含まれます。@spid1 と @spid2 のいずれも指定しない場合、結果セットでは、データベース エンジンのインスタンスで現在アクティブなすべてのセッションのロックがレポートされます。
列名 |
データ型 |
説明 |
---|---|---|
spid |
smallint |
ロックを要求しているプロセスのデータベース エンジン セッション ID 番号です。 |
dbid |
smallint |
ロックが保持されているデータベースの ID 番号です。DB_NAME() 関数を使用して、データベースを識別できます。 |
ObjId |
int |
ロックが保持されているオブジェクトの ID 番号です。関連するデータベースで OBJECT_NAME() 関数を使用して、オブジェクトを識別できます。値 99 は、データベース内のページ割り当てを記録するために使用されるいずれかのシステム ページのロックを示す特殊な値です。 |
IndId |
smallint |
ロックが保持されているインデックスの ID 番号です。 |
Type |
nchar(4) |
ロックの種類 RID = 行識別子 (RID) で識別されるテーブル内の単一行のロック。 KEY = シリアル化可能なトランザクションのキーの範囲を保護するインデックス内のロック。 PAG = データまたはインデックス ページのロック。 EXT = エクステントのロック。 TAB = すべてのデータとインデックスを含むテーブル全体のロック。 DB = データベースのロック。 FIL = データベース ファイルのロック。 APP = アプリケーションで指定されたリソースのロック。 MD = メタデータまたはカタログ情報のロック。 HBT = ヒープまたは B-Tree インデックスのロック。SQL Server ではこの情報は不完全です。 AU = アロケーション ユニットのロック。SQL Server ではこの情報は不完全です。 |
Resource |
nchar(32) |
ロックされているリソースを識別する値です。値のフォーマットは、Type 列で識別されるリソースの種類によって異なります。 Type Value: Resource Value RID : fileid:pagenumber:rid というフォーマットの識別子です。fileid はページが含まれるファイル、pagenumber は行が含まれるページ、rid はページ上の特定の行をそれぞれ識別します。fileid は sys.database_files カタログ ビューの file_id 列と一致します。 KEY : データベース エンジンが内部的に使用する 16 進数です。 PAG : fileid:pagenumbe というフォーマットの番号です。fileid はページが含まれるファイル、pagenumber はページをそれぞれ識別します。 EXT: エクステント内の先頭ページを識別する番号です。この番号は、fileid:pagenumber というフォーマットで指定します。 TAB : テーブルは ObjId 列で既に識別されているため、情報は提供されません。 DB : データベースは dbid 列で既に識別されているため、情報は提供されません。 FIL : ファイルの識別子です。sys.database_files カタログ ビューの file_id 列と一致します。 APP : ロックされているアプリケーション リソースの一意識別子です。DbPrincipleId:<16 文字のリソース文字列の先頭の 2 文字><ハッシュ値> というフォーマットで指定されます。 MD : リソースの種類によって異なります。詳細については、「sys.dm_tran_locks (Transact-SQL)」の resource_description 列に関する説明を参照してください。 HBT : 情報は提供されません。代わりに sys.dm_tran_locks 動的管理ビューを使用してください。 AU : 情報は提供されません。代わりに sys.dm_tran_locks 動的管理ビューを使用してください。 |
Mode |
nvarchar(8) |
要求されたロック モードです。次の値をとります。 NULL = リソースへのアクセスが一切許可されません。プレースホルダとしての役割を果たします。 Sch-S = スキーマ安定度。スキーマ要素に対してスキーマ安定度ロックが保持されているセッションでは、テーブルやインデックスなどのスキーマ要素は削除されません。 Sch-M = スキーマ修正。特定のリソースのスキーマを変更するセッションで設定する必要があります。他のセッションが、目的のオブジェクトを参照していないことを確認します。 S = 共有。保持しているセッションに、リソースへの共有アクセスが許可されます。 U = 更新。リソースに設定された更新ロックが、最終的には更新されるかもしれないことを指定します。これは、複数のセッションが、後で更新する可能性があるリソースをロックするときに発生する、一般的なデッドロックの形式を防止するために使用されます。 X = 排他。保持しているセッションに、リソースへの排他アクセスが許可されます。 IS = インテント共有。ロック階層の下位のリソースに S ロックを設定することを指定します。 IU = インテント更新。ロック階層の下位のリソースに U ロックを設定することを指定します。 IX = インテント排他。ロック階層の下位のリソースに X ロックを設定することを指定します。 SIU = 共有インテント更新。ロック階層の下位のリソースに更新ロックを設定する目的で、リソースの共有アクセスを指定します。 SIX = 共有インテント排他。ロック階層の下位のリソースに排他ロックを設定する目的で、リソースの共有アクセスを指定します。 UIX = 更新インテント排他。ロック階層の下位のリソースに排他ロックを設定する目的で、リソースに保持する更新ロックを指定します。 BU = 一括更新。一括操作で使用します。 RangeS_S = 共有キー範囲と共有リソース ロック。シリアル化可能な範囲スキャンを指定します。 RangeS_U = 共有キー範囲と更新リソース ロック。シリアル化可能な更新スキャンを指定します。 RangeI_N = 挿入キー範囲と NULL リソース ロック。新しいキーをインデックスに挿入する前に範囲をテストするのに使用します。 RangeI_S = キー範囲変換ロック。範囲 I_N ロックと S ロックの重複によって作成されます。 RangeI_U = 範囲 I_N と U ロックの重複によって作成されるキー範囲変換ロックです。 RangeI_X = 範囲 I_N と X ロックの重複によって作成されるキー範囲変換ロックです。 RangeX_S = 範囲 I_N と範囲 S_S ロックの重複によって作成されるキー範囲変換ロックです。 RangeX_U = 範囲 I_N と範囲 S_U ロックの重複によって作成されるキー範囲変換ロックです。 RangeX_X = 排他キー範囲と排他リソース ロック。これは、範囲内のキーを更新する場合に使用する変換ロックです。 |
Status |
nvarchar(5) |
ロック要求の状態。 CNVRT : ロックは別のモードから変換しようとしたが、競合するモードでロックを保持している別のプロセスによって変換がブロックされていることを示します。 GRANT : ロックが取得されたことを示します。 WAIT : 競合するモードでロックを保持している別のプロセスによってロックがブロックされていることを示します。 |
説明
次の処理を行うことで、読み込み操作のロックを制御できます。
SET TRANSACTION ISOLATION LEVEL を使用してセッションのロック レベルを指定します。構文と制限事項については、「SET TRANSACTION ISOLATION LEVEL (Transact-SQL)」を参照してください。
ロック テーブル ヒントを使用して、FROM 句での個々のテーブル参照のロック レベルを指定します。構文と制限事項については、「テーブル ヒント (Transact-SQL)」を参照してください。
データベース エンジンで使用されるロックの種類の詳細については、「データベース エンジンのロック」を参照してください。
セッションに関連付けられていないすべての分散トランザクションは、孤立しているトランザクションです。データベース エンジンでは、孤立しているすべての分散トランザクションに、-2 の SPID 値が割り当てられます。このため、ユーザーは、孤立している分散トランザクションを簡単に識別できます。詳細については、「マークされたトランザクションの使用 (完全復旧モデル)」を参照してください。
権限
VIEW SERVER STATE 権限が必要です。
例
A. すべてのロックを一覧表示する
次の例では、データベース エンジンのインスタンスで現在保持されているすべてのロックに関する情報を表示します。
USE master;
GO
EXEC sp_lock;
GO
B. 1 つのサーバー プロセスからロックを表示する
次の例では、プロセス ID 53 に関する情報を表示します。ロックなどの情報も含まれます。
USE master;
GO
EXEC sp_lock 53;
GO