다음을 통해 공유


sp_lock(Transact-SQL)

적용 대상: SQL Server

잠금에 대한 정보를 보고합니다.

Important

SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. SQL Server 데이터베이스 엔진 잠금에 대한 정보를 가져오려면 sys.dm_tran_locks 동적 관리 뷰를 사용합니다.

Transact-SQL 구문 표기 규칙

구문

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

인수

[ @spid1 = ] spid1

사용자가 정보를 잠그려는 데이터베이스 엔진 세션 ID 번호 sys.dm_exec_sessions 입니다. @spid1 기본값NULL인 int입니다. 세션에 대한 프로세스 정보를 가져오려면 실행 sp_who 합니다. @spid1 지정하지 않으면 모든 잠금에 대한 정보가 표시됩니다.

[ @spid2 = ] spid2

다른 데이터베이스 엔진 세션 ID 번호 sys.dm_exec_sessions 는 @spid1 사용자가 정보를 원하는 것과 동시에 잠금이 있을 수 있습니다. @spid2 기본값NULL인 int입니다.

반환 코드 값

0 (성공).

결과 집합

결과 집합에는 sp_lock @spid1 및 @spid2 매개 변수에 지정된 세션에서 보유한 각 잠금에 대해 하나의 행이 포함됩니다. @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-트리(HoBT)를 잠급니다. 이 정보는 SQL Server에서 불완전합니다.
AU = 할당 단위를 잠급니다. 이 정보는 SQL Server에서 불완전합니다.
Resource nchar(32) 잠긴 리소스를 식별하는 값입니다. 값의 형식은 열에 식별된 리소스의 형식에 Type 따라 달라집니다.

Type 값: Resource
RID: 페이지가 fileid 포함된 파일을 식별하고, 행이 포함된 페이지를 식별하고, rid pagenumber 페이지의 특정 행을 식별하는 형식fileid:pagenumber:rid의 식별자입니다. fileidfile_id 카탈로그 뷰의 열과 sys.database_files 일치합니다.
KEY: 데이터베이스 엔진 내부적으로 사용되는 16진수입니다.
PAG: 페이지가 포함된 파일을 식별하고 페이지를 pagenumber 식별하는 형식 fileid:pagenumberfileid 의 숫자입니다.
EXT: 익스텐트에서 첫 번째 페이지를 식별하는 숫자입니다. 숫자는 형식 fileid:pagenumber입니다.
TAB: 열에 테이블이 이미 식별되어 ObjId 있으므로 정보가 제공되지 않습니다.
DB: 데이터베이스가 열에 dbid 이미 식별되어 있으므로 정보가 제공되지 않습니다.
FIL: 카탈로그 뷰의 열과 일치하는 파일의 file_id sys.database_files 식별자입니다.
APP: 잠겨 있는 애플리케이션 리소스에 고유한 식별자입니다. 형식 DbPrincipalId:<first two to 16 characters of the resource string><hashed value>입니다.
MD: 리소스 종류에 따라 다릅니다. 자세한 내용은 sys.dm_tran_locks에 대한 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 = 키 범위 변환 잠금입니다. 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)를 참조하세요.

세션과 연결되지 않은 모든 분산 트랜잭션은 분리된 트랜잭션입니다. 데이터베이스 엔진 분리된 모든 분산 트랜잭션에 SPID 값을 -2할당하므로 사용자가 분산 트랜잭션 차단을 보다 쉽게 식별할 수 있습니다. 자세한 내용은 표시된 트랜잭션을 사용하여 관련 데이터베이스를 일관되게 복구하는 방법을 참조 하세요.

사용 권한

VIEW SERVER STATE 권한이 필요합니다.

예제

A. 모든 잠금 나열

다음 예제에서는 현재 데이터베이스 엔진 인스턴스에 보관된 모든 잠금에 대한 정보를 표시합니다.

USE master;
GO
EXEC sp_lock;
GO

B. 단일 서버 프로세스에서 잠금 나열

다음 예제에서는 프로세스 ID 53에 대한 잠금을 포함한 정보를 표시합니다.

USE master;
GO
EXEC sp_lock 53;
GO