본문 바로가기
IT 정보/개발 지식

MSSQL - LOCK 조회 쿼리

by 고고 뜌지 2022. 8. 16.

SELECT   DER.SESSION_ID ,
         DER.COMMAND ,
         CONVERT(VARCHAR(10),CONVERT(INT, DER.TOTAL_ELAPSED_TIME/1000)) + N'초' AS TOTAL_ELAPSED_TIME ,
         ISNULL(DB.NAME,DER.DATABASE_ID)                                       AS DATABASENAME ,
         ISNULL(OBJECT_NAME(ST.OBJECTID, ST.DBID),'')                          AS OBJECTNAME ,
         CASE
                  WHEN ENCRYPTED = 1
                  THEN N'Encrypted Text'
                  ELSE
                        (SELECT
                                TOP 1 SUBSTRING(ST.TEXT,STATEMENT_START_OFFSET / 2+1 , ((
                                CASE
                                        WHEN STATEMENT_END_OFFSET =               -1
                                        THEN (LEN(CONVERT(NVARCHAR(MAX),ST.TEXT)) * 2)
                                        ELSE STATEMENT_END_OFFSET
                                END) -STATEMENT_START_OFFSET)/2+1)
                        )
         END AS SQL_STATEMENT ,
         DER.LAST_WAIT_TYPE ,
         DER.STATUS ,
         DES.HOST_NAME ,
         DES.LOGIN_NAME ,
         DES.PROGRAM_NAME ,
         DER.*
FROM     SYS.DM_EXEC_REQUESTS                                                                       AS DER
         LEFT OUTER JOIN SYS.DATABASES                                                              AS DB
         ON       DER.DATABASE_ID = DB.DATABASE_ID OUTER APPLY SYS.DM_EXEC_SQL_TEXT(DER.SQL_HANDLE) AS ST
         LEFT OUTER JOIN SYS.DM_EXEC_SESSIONS                                                       AS DES
         ON       DER.SESSION_ID = DES.SESSION_ID
WHERE    DER.SESSION_ID          > 50
AND      DER.SESSION_ID         != @@SPID
ORDER BY CONVERT(INT, DER.TOTAL_ELAPSED_TIME/1000) DESC ;



KILL 625
-----------------------------------------------------------
EXEC SP_LOCK
--Blocking하기있는세션자세히보기
EXEC SP_LOCK
SELECT *
FROM   SYS.SYSPROCESSES
WHERE  BLOCKED > 0
SELECT '블럭카운트: ' + CAST(CNT AS VARCHAR(10))
FROM   ( SELECT COUNT(*) CNT
       FROM    SYS.SYSPROCESSES
       WHERE   BLOCKED <> 0
       )
       AS A;



WITH BLOCKING AS
( SELECT SPID,
        BLOCKED,
        CAST(SPID AS VARCHAR(100)) AS BLOCKTREE,
        LEVEL = 0 ,
        CAST(SPID AS VARBINARY(4000)) AS BLOCK_DEPTH
FROM    MASTER.DBO.SYSPROCESSES
WHERE   BLOCKED = 0
AND     SPID    > 50
AND     SPID IN
        (SELECT BLOCKED
        FROM    MASTER.DBO.SYSPROCESSES
        WHERE   BLOCKED <> 0
        )



UNION ALL



SELECT DS.SPID ,
       DS.BLOCKED ,
       CAST(BC.BLOCKTREE + ' > ' + CAST(DS.SPID AS VARCHAR(100)) AS VARCHAR(100)) ,
       LEVEL             + 1 ,
       CAST(BLOCK_DEPTH  + CAST(DS.BLOCKED AS BINARY(4)) AS VARBINARY(4000))
FROM   BLOCKING                           AS BC
       INNER JOIN MASTER.DBO.SYSPROCESSES AS DS
       ON     DS.BLOCKED = BC.SPID
)
SELECT      BC.BLOCKTREE                                             AS [블럭TREE],
            CONVERT(VARCHAR, DATEADD(S ,SP.WAITTIME / 1000, ''), 8 ) AS [HH:MM:SS],
            DB_NAME(SP.DBID)                                         AS [실행DB],
            SP.LASTWAITTYPE                                          AS [대기유형],
            SP.WAITRESOURCE                                          AS [대기자원],
            SP.CMD                                                   AS [차단중인명령어],
            SP.HOSTNAME                                              AS [호스트명],
            SP.PROGRAM_NAME                                          AS [실행프로그램],
            SP.LOGINAME                                              AS [실행계정],
            SQL_TEXT.TEXT                                            AS [실행문]
            --SP.*
FROM        BLOCKING                           AS BC
            INNER JOIN MASTER.DBO.SYSPROCESSES AS SP
            ON          BC.SPID = SP.SPID
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(SQL_HANDLE) AS SQL_TEXT
ORDER BY    BLOCK_DEPTH KILL 760
--dbcc inputbuffer (284)
--dbcc sp_OACreate(69)
SELECT      TEXT,
            BLOCKING_SESSION_ID,
            COMMAND,
            DATABASE_ID,
            WAIT_TYPE,
            WAIT_RESOURCE,
            *
FROM        SYS.DM_EXEC_REQUESTS                     AS REQUEST
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(REQUEST.SQL_HANDLE) AS SQL_TEXT
WHERE       SESSION_ID           > 50
AND         SESSION_ID          <> @@SPID
AND         BLOCKING_SESSION_ID <> 0

'IT 정보 > 개발 지식' 카테고리의 다른 글

host 파일 변경  (0) 2024.03.24
[js] REST API 호출 종류  (0) 2023.09.03
Visual Studio Code 단축키  (0) 2022.05.02
비즈니스 로직 (Business Logic)  (0) 2021.03.09

댓글