[SQL] 테이블에 개최되는 잠금 확인하는 방법
SQL테이블에 개최되는 잠금 확인하는 방법
우리는 어떻게 쿼리 일괄 처리에 대한 행을에 적용되는 데이터베이스 잠금 확인할 수 있습니까?
하이라이트 테이블 행 수준을 실시간으로 잠금 것을 모든 도구?
DB : 2005 SQL 서버
해결법
-
==============================
1.다른 응답에 추가하려면,는 sp_lock는 실행중인 모든 프로세스에 대한 전체 잠금 정보를 덤프하는 데 사용할 수 있습니다. 출력은 압도 될 수 있지만이 잠겨 정확히 알고 싶다면, 그것을 실행하는 가치있는 일입니다. 나는 보통 잠금 문제에 대한 신속 제로로 sp_who2와 함께 그것을 사용할 수 있습니다.
다른 응답에 추가하려면,는 sp_lock는 실행중인 모든 프로세스에 대한 전체 잠금 정보를 덤프하는 데 사용할 수 있습니다. 출력은 압도 될 수 있지만이 잠겨 정확히 알고 싶다면, 그것을 실행하는 가치있는 일입니다. 나는 보통 잠금 문제에 대한 신속 제로로 sp_who2와 함께 그것을 사용할 수 있습니다.
사용 가능한 "우호적"는 sp_lock 절차의 여러 다른 버전은 문제의 SQL Server의 버전에 따라 온라인이 있습니다.
지금 같이 sys.dm_tran_locks는 이런 종류의 일에 대한보기를 사용하는 것이 좋습니다 귀하의 경우, SQL 서버 2005,는 sp_lock는 계속 사용할 수 있지만 사용되지 않습니다. 현재는 sp_lock 기능 "자신의 롤 '하는 방법의 예를 찾을 수 있습니다.
-
==============================
2.이것이 바로 행이 잠겨을 보여주는 것이 아니라,이 당신에게 도움이 할 수있다.
이것이 바로 행이 잠겨을 보여주는 것이 아니라,이 당신에게 도움이 할 수있다.
이 작업을 실행하여 차단하는 문 확인할 수 있습니다 :
select cmd,* from sys.sysprocesses where blocked > 0
또한 각 블록이 기다리고 무엇을 말할 것이다. 그래서 당신은 추적 할 수있는 모든 방법까지 다른 블록을 일으킨 첫 번째 블록을 일으킨 문 참조하십시오.
편집 @MikeBlandford에서 댓글을 추가하려면 :
-
==============================
3.당신은 쿼리를 수행하여 테이블에 현재 잠금을 찾을 수 있습니다.
당신은 쿼리를 수행하여 테이블에 현재 잠금을 찾을 수 있습니다.
USE yourdatabase; GO SELECT * FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID() AND resource_associated_entity_id = OBJECT_ID(N'dbo.yourtablename');
는 sys.dm_tran_locks를 참조하십시오
동일한 request_owner_type의 여러 인스턴스가 존재하면, request_owner_id 열은 각 인스턴스들을 구별하기 위해 사용된다. 분산 트랜잭션의 경우, request_owner_type과 request_owner_guid 열은 서로 다른 개체의 정보가 표시됩니다.
예를 들어, 세션 S1은 표 1에 공유 잠금을 소유; 세션 S1에서 실행되는 트랜잭션 T1은 또한 표 1에서 공유 잠금을 소유하고있다. 이 경우는 sys.dm_tran_locks 반환하는 resource_description 열은 동일한 리소스의 두 인스턴스를 표시한다. request_owner_type 열은 하나 개의 세션으로 인스턴스와 트랜잭션으로 다른 표시됩니다. 또한, resource_owner_id 열은 서로 다른 값을 가질 것이다.
-
==============================
4.나는뿐만 아니라 잠겨 항목의 OBJECT_ID 또는 PARTITION_ID 캡처 잠금 장치에 동적 관리 뷰 (DMV)를 사용합니다.
나는뿐만 아니라 잠겨 항목의 OBJECT_ID 또는 PARTITION_ID 캡처 잠금 장치에 동적 관리 뷰 (DMV)를 사용합니다.
(당신이 OBJECT_ID 얻을 관찰하고자하는 데이터베이스로 전환해야합니다)
SELECT TL.resource_type, TL.resource_database_id, TL.resource_associated_entity_id, TL.request_mode, TL.request_session_id, WT.blocking_session_id, O.name AS [object name], O.type_desc AS [object descr], P.partition_id AS [partition id], P.rows AS [partition/page rows], AU.type_desc AS [index descr], AU.container_id AS [index/page container_id] FROM sys.dm_tran_locks AS TL INNER JOIN sys.dm_os_waiting_tasks AS WT ON TL.lock_owner_address = WT.resource_address LEFT OUTER JOIN sys.objects AS O ON O.object_id = TL.resource_associated_entity_id LEFT OUTER JOIN sys.partitions AS P ON P.hobt_id = TL.resource_associated_entity_id LEFT OUTER JOIN sys.allocation_units AS AU ON AU.allocation_unit_id = TL.resource_associated_entity_id;
-
==============================
5.또한 차단하고 SQL Server 인스턴스에 대한 프로세스를 차단 전류를 얻기 위해 내장 sp_who2 저장 프로 시저를 사용할 수 있습니다. 일반적으로 당신은 프로파일 러에서 발행 SPID 가장 최근의 명령에 차단 과정과 모습을 찾기 위해 SQL 프로파일 러 인스턴스와 함께이 작업을 실행하는 것입니다.
또한 차단하고 SQL Server 인스턴스에 대한 프로세스를 차단 전류를 얻기 위해 내장 sp_who2 저장 프로 시저를 사용할 수 있습니다. 일반적으로 당신은 프로파일 러에서 발행 SPID 가장 최근의 명령에 차단 과정과 모습을 찾기 위해 SQL 프로파일 러 인스턴스와 함께이 작업을 실행하는 것입니다.
-
==============================
6.당신은 아래의 스크립트를 통해 자세한 내용을 확인할 수 있습니다.
당신은 아래의 스크립트를 통해 자세한 내용을 확인할 수 있습니다.
-- List all Locks of the Current Database SELECT TL.resource_type AS ResType ,TL.resource_description AS ResDescr ,TL.request_mode AS ReqMode ,TL.request_type AS ReqType ,TL.request_status AS ReqStatus ,TL.request_owner_type AS ReqOwnerType ,TAT.[name] AS TransName ,TAT.transaction_begin_time AS TransBegin ,DATEDIFF(ss, TAT.transaction_begin_time, GETDATE()) AS TransDura ,ES.session_id AS S_Id ,ES.login_name AS LoginName ,COALESCE(OBJ.name, PAROBJ.name) AS ObjectName ,PARIDX.name AS IndexName ,ES.host_name AS HostName ,ES.program_name AS ProgramName FROM sys.dm_tran_locks AS TL INNER JOIN sys.dm_exec_sessions AS ES ON TL.request_session_id = ES.session_id LEFT JOIN sys.dm_tran_active_transactions AS TAT ON TL.request_owner_id = TAT.transaction_id AND TL.request_owner_type = 'TRANSACTION' LEFT JOIN sys.objects AS OBJ ON TL.resource_associated_entity_id = OBJ.object_id AND TL.resource_type = 'OBJECT' LEFT JOIN sys.partitions AS PAR ON TL.resource_associated_entity_id = PAR.hobt_id AND TL.resource_type IN ('PAGE', 'KEY', 'RID', 'HOBT') LEFT JOIN sys.objects AS PAROBJ ON PAR.object_id = PAROBJ.object_id LEFT JOIN sys.indexes AS PARIDX ON PAR.object_id = PARIDX.object_id AND PAR.index_id = PARIDX.index_id WHERE TL.resource_database_id = DB_ID() AND ES.session_id <> @@Spid -- Exclude "my" session -- optional filter AND TL.request_mode <> 'S' -- Exclude simple shared locks ORDER BY TL.resource_type ,TL.request_mode ,TL.request_type ,TL.request_status ,ObjectName ,ES.login_name; --TSQL commands SELECT db_name(rsc_dbid) AS 'DATABASE_NAME', case rsc_type when 1 then 'null' when 2 then 'DATABASE' WHEN 3 THEN 'FILE' WHEN 4 THEN 'INDEX' WHEN 5 THEN 'TABLE' WHEN 6 THEN 'PAGE' WHEN 7 THEN 'KEY' WHEN 8 THEN 'EXTEND' WHEN 9 THEN 'RID ( ROW ID)' WHEN 10 THEN 'APPLICATION' end AS 'REQUEST_TYPE', CASE req_ownertype WHEN 1 THEN 'TRANSACTION' WHEN 2 THEN 'CURSOR' WHEN 3 THEN 'SESSION' WHEN 4 THEN 'ExSESSION' END AS 'REQUEST_OWNERTYPE', OBJECT_NAME(rsc_objid ,rsc_dbid) AS 'OBJECT_NAME', PROCESS.HOSTNAME , PROCESS.program_name , PROCESS.nt_domain , PROCESS.nt_username , PROCESS.program_name , SQLTEXT.text FROM sys.syslockinfo LOCK JOIN sys.sysprocesses PROCESS ON LOCK.req_spid = PROCESS.spid CROSS APPLY sys.dm_exec_sql_text(PROCESS.SQL_HANDLE) SQLTEXT where 1=1 and db_name(rsc_dbid) = db_name() --Lock on a specific object SELECT * FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID() AND resource_associated_entity_id = object_id('Specific Table');
from https://stackoverflow.com/questions/694581/how-to-check-which-locks-are-held-on-a-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 기본 키를 제거 (0) | 2020.04.13 |
---|---|
[SQL] SQL 또는 TSQL 튜링 완료? (0) | 2020.04.13 |
[SQL] CTE, 하위 쿼리, 임시 테이블 또는 테이블 변수 사이의 성능 차이가 있나요? (0) | 2020.04.13 |
[SQL] 어떻게 MySQL을 텍스트로 BLOB에서 변환합니까? (0) | 2020.04.12 |
[SQL] 모든 (또는 대부분의) 데이터베이스에서 작동 효율적인 SQL 테스트 쿼리 또는 유효성 검사 쿼리 (0) | 2020.04.12 |