sp_lock (Transact-SQL)

適用対象: SQL Server

ロックに関する情報を報告します。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 SQL Server データベース エンジンのロックに関する情報を取得するには、sys.dm_tran_locks動的管理ビューを使用します。

Transact-SQL 構文表記規則

構文

sp_lock
    [ [ @spid1 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

引数

[ @spid1 = ] spid1

ユーザーがロック情報を必要とするsys.dm_exec_sessionsからのデータベース エンジンセッション ID 番号。 @spid1int で、既定値は NULL です。 sp_whoを実行して、セッションに関するプロセス情報を取得します。 @spid1が指定されていない場合は、すべてのロックに関する情報が表示されます。

[ @spid2 = ] spid2

@spid1と同時にロックを持ち、ユーザーが情報も必要とするsys.dm_exec_sessionsからの別のデータベース エンジンセッション ID 番号。 @spid2int で、既定値は NULL です。

リターン コードの値

0 (成功)。

結果セット

sp_lock結果セットには、@spid1および@spid2パラメーターで指定されたセッションによって保持されるロックごとに 1 行が含まれます。 @spid1@spid2も指定されていない場合、結果セットは、データベース エンジンのインスタンスで現在アクティブなすべてのセッションのロックを報告します。

列名 データ型 説明
spid smallint ロックを要求するプロセスのデータベース エンジンセッション ID 番号。
dbid smallint ロックが保持されているデータベースの ID 番号です。 DB_NAME()関数を使用して、データベースを識別できます。
ObjId int ロックが保持されているオブジェクトの識別番号。 関連データベースの OBJECT_NAME() 関数を使用して、オブジェクトを識別できます。 99の値は、データベース内のページの割り当てを記録するために使用されるシステム ページの 1 つに対するロックを示す特殊なケースです。
IndId smallint ロックが保持されているインデックスの識別番号。
Type nchar(4) ロックの種類:

RID = 行識別子 (RID) によって識別されるテーブル内の 1 つの行に対するロック。
KEY = シリアル化可能なトランザクション内のキーの範囲を保護するインデックス内でロックします。
PAG = データまたはインデックス ページのロック。
EXT = エクステントのロック。
TAB = すべてのデータとインデックスを含む、テーブル全体に対するロック。
DB = データベースのロック。
FIL = データベース ファイルをロックします。
APP = アプリケーション指定のリソースをロックします。
MD = メタデータまたはカタログ情報のロック。
HBT = ヒープまたは B ツリー (HoBT) のロック。 この情報は、SQL Server では不完全です。
AU = アロケーション ユニットのロック。 この情報は、SQL Server では不完全です。
Resource nchar(32) ロックされているリソースを識別する値。 値の形式は、 Type 列で識別されるリソースの種類によって異なります。

Type 値: Resource
RID: fileid:pagenumber:rid形式の識別子。 fileid はページを含むファイルを識別し、 pagenumber は行を含むページを識別し、 rid はページ上の特定の行を識別します。 fileidは、sys.database_files カタログ ビューのfile_id列と一致します。
KEY: データベース エンジンによって内部的に使用される 16 進数。
PAG: fileid:pagenumber形式の数値。 fileid はページを含むファイルを識別し、 pagenumber はページを識別します。
EXT: エクステント内の最初のページを識別する番号。 数値は fileid:pagenumberの形式です。
TAB: ObjId 列でテーブルが既に識別されているため、情報は提供されません。
DB: dbid 列にデータベースが既に識別されているため、情報は提供されません。
FIL: sys.database_files カタログ ビューのfile_id列と一致するファイルの識別子。
APP: ロックされているアプリケーション リソースに固有の識別子。 DbPrincipalId:<first two to 16 characters of the resource string><hashed value>形式。
MD: リソースの種類によって異なります。 詳細については、sys.dm_tran_locksresource_description列の説明を参照してください。
HBT: 情報が提供されていません。 代わりに、 sys.dm_tran_locks 動的管理ビューを使用してください。
AU: 情報が提供されていません。 代わりに、 sys.dm_tran_locks 動的管理ビューを使用してください。
Mode nvarchar(8) 要求されたロック モードです。 次の値をとります。

NULL = リソースへのアクセス権は付与されません。 プレースホルダーとして機能します。
Sch-S = スキーマの安定性。 どのセッションでもスキーマ要素のスキーマ安定性ロックを保持している間、テーブルやインデックスなどのスキーマ要素が削除されないようにします。
Sch-M = スキーマの変更。 指定したリソースのスキーマを変更するセッションで保持する必要があります。 指定されたオブジェクトを他のセッションが参照しないようにします。
S = 共有。 保持しているセッションに、リソースへの共有アクセスが許可されます。
U = 更新。 最終的に更新される可能性があるリソースに対して取得された更新ロックを示します。 これは、複数のセッションが後で潜在的な更新のためにリソースをロックするときに発生する一般的な形式のデッドロックを防ぐために使用されます。
X = 排他。 保持しているセッションで、リソースへの排他アクセスが許可されます。
IS = 意図共有。 ロック階層の下位のリソースに X ロックを設定するよう指定します。
IU = 意図の更新。 ロック階層の下位のリソースに U ロックを設定するよう指定します。
IX = インテント排他。 ロック階層の下位のリソースに X ロックを設定するよう指定します。
SIU = 共有インテントの更新。 ロック階層の下位のリソースに更新ロックを設定する目的で、リソースへの共有アクセスを指定します。
SIX = 共有インテント排他。 ロック階層の下位のリソースに更新ロックを設定する目的で、リソースへの共有アクセスを指定します。
UIX = 意図を排他的に更新します。 ロック階層の下位のリソースに排他ロックを設定する目的で、リソースに保持する更新ロックを指定します。
BU = 一括更新。 一括操作で使用されます。
RangeS_S = 共有キー範囲と共有リソース ロック。 シリアル化可能な範囲スキャンを示します。
RangeS_U = 共有キー範囲と更新リソース ロック。 シリアル化可能な更新プログラムのスキャンを示します。
RangeI_N = キー範囲の挿入と Null リソース ロック。 インデックスに新しいキーを挿入する前に範囲をテストするために使用されます。
RangeI_S = キー範囲変換ロック。 RangeI_Nロックと S ロックの重なりによって作成されます。
RangeI_U = RangeI_Nロックと U ロックの重複によって作成されたキー範囲変換ロック。
RangeI_X = RangeI_N ロックと X ロックの重複によって作成されたキー範囲変換ロック。
RangeX_S = RangeI_NとRangeS_Sの重複によって作成されたキー範囲変換ロック。 ロック。
RangeX_U = RangeI_NロックとRangeS_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. 単一サーバー プロセスからのロックを一覧表示する

次の例では、プロセス ID 53 に関する情報を表示します。ロックなどの情報も含まれます。

USE master;
GO
EXEC sp_lock 53;
GO