sp_lock(Transact-SQL)

적용 대상:SQL Server

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

Important

이 기능은 이후 버전의 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 번호입니다. 세션 ID1기본값이 NULL인 int 입니다. sp_who 실행하여 세션에 대한 프로세스 정보를 가져옵니다. 세션 ID1을 지정하지 않으면 모든 잠금에 대한 정보가 표시됩니다.

[ @spid2 = ] 'session ID2'세션 ID1과 동시에 잠금이 있을 수 있고 사용자가 정보를 원하는 sys.dm_exec_sessions 또 다른 데이터베이스 엔진 세션 ID 번호입니다. 세션 ID2기본값이 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에서 불완전합니다.
리소스 nchar(32) 잠긴 리소스를 식별하는 값입니다. 값의 형식은 형식 열에서 식별되는 리소스의 형식에 따라 달라집니다.

형식 값: 리소스

RID: fileid:pagenumber:rid 형식의 식별자입니다. 여기서 fileid는 페이지가 포함된 파일을 식별하고, pagenumber는 행이 포함된 페이지를 식별하고, rid는 페이지의 특정 행을 식별합니다. fileid는 sys.database_files 카탈로그 뷰의 file_id 열과 일치합니다.

키: 데이터베이스 엔진 내부적으로 사용하는 16진수입니다.

PAG: fileid:pagenumber 형식의 숫자로, fileid는 페이지를 포함하는 파일을 식별하고 pagenumber는 페이지를 식별합니다.

EXT: 익스텐트의 첫 번째 페이지를 식별하는 숫자입니다. 이 번호의 형식은 fileid:pagenumber입니다.

TAB: 테이블이 ObjId 열에서 이미 식별되어 있으므로 정보가 제공되지 않습니다.

DB: 데이터베이스가 dbid 열에서 이미 식별되었기 때문에 제공된 정보가 없습니다.

FIL: sys.database_files 카탈로그 뷰의 file_id 열과 일치하는 파일의 식별자입니다.

APP: 잠겨 있는 애플리케이션 리소스에 고유한 식별자입니다. DbPrincipalId 형식:<리소스 문자열><해시 값>의 처음 2~16자입니다.

MD: 리소스 유형에 따라 달라집니다. 자세한 내용은 sys.dm_tran_locks(Transact-SQL)resource_description 열에 대한 설명을 참조하세요.

HBT: 제공된 정보가 없습니다. 대신 sys.dm_tran_locks 동적 관리 뷰를 사용합니다.

AU: 제공된 정보가 없습니다. 대신 sys.dm_tran_locks 동적 관리 뷰를 사용합니다.
모드 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 = 배타 키 범위 및 배타 리소스 잠금. 범위에서 키를 업데이트할 때 사용되는 변환 잠금입니다.
상태 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  

참고 항목

sys.dm_tran_locks (Transact-SQL)
DB_NAME(Transact-SQL)
KILL(Transact-SQL)
OBJECT_NAME(Transact-SQL)
sp_who(Transact-SQL)
sys.database_files(Transact-SQL)
sys.dm_os_tasks(Transact-SQL)
sys.dm_os_threads(Transact-SQL)