다음을 통해 공유


sp_lock(Transact-SQL)

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

중요 정보중요

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오. SQL Server 데이터베이스 엔진 내의 잠금에 대한 정보를 보려면 sys.dm_tran_locks 동적 관리 뷰를 사용하십시오.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]

인수

  • [ @spid1 = ] 'session ID1'
    잠금 정보를 확인할 sys.dm_exec_sessions의 데이터베이스 엔진 세션 ID(SQL Server 2000 및 이전 버전에서는 SPID)입니다. session ID1은 int이며 기본값은 NULL입니다. 세션에 대한 프로세스 정보를 가져오려면 sp_who를 실행하십시오. session ID1을 지정하지 않은 경우 모든 잠금에 대한 정보가 표시됩니다.

  • [ @spid2 = ] 'session ID2'
    session ID1과 동시에 잠금을 보유할 수 있으므로 역시 잠금 정보를 확인할 sys.dm_exec_sessions의 다른 데이터베이스 엔진 세션 ID입니다. session ID2는 int이며 기본값은 NULL입니다.

반환 코드 값

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-트리 인덱스에 대한 잠금입니다. 이 정보는 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: 잠긴 응용 프로그램 리소스의 고유 식별자입니다. 형식은 DbPrincipleId:<리소스 문자열의 처음 2자부터 16자까지><해시된 값>입니다.

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 = 키 범위 변환 잠금. RangeI_N 및 S 잠금의 겹침으로 생성됩니다.

RangeI_U = RangeI_N 및 U 잠금의 겹침으로 생성된 키 범위 변환 잠금.

RangeI_X = RangeI_N 및 X 잠금의 겹침으로 생성된 키 범위 변환 잠금.

RangeI_X_S = RangeI_N 및 RangeS_S 잠금의 겹침으로 생성된 키 범위 변환 잠금.

RangeI_X_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 권한이 필요합니다.

1. 모든 잠금 나열

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

USE master;
GO
EXEC sp_lock;
GO

2. 단일 서버 프로세스의 잠금 나열

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

USE master;
GO
EXEC sp_lock 53;
GO