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