반응형

/*
-- Title : [SQL2017] sp_who2, sp_whoisactive가 안될 때 Lock 조회 쿼리
-- Reference : 구글링
*/


■ 조회쿼리-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT p.status ,p.program_name ,p.hostname ,p.spid ,p.blocked ,p.kpid
     , p.cpu ,p.physical_io ,p.waittype ,p.waittime ,p.lastwaittype
     , p.waitresource ,p.dbid ,p.uid ,p.memusage ,p.login_time ,p.last_batch
     , p.ecid ,p.open_tran ,p.sid ,p.hostprocess
     , p.cmd ,p.nt_domain ,p.nt_username ,p.net_address
     , p.net_library ,p.loginame ,p.context_info ,p.sql_handle
     , p.stmt_start ,p.stmt_end
FROM master..sysprocesses p
WHERE (
       STATUS LIKE 'run%'
       OR waittime > 0
       OR blocked <> 0
       OR open_tran <> 0
       OR EXISTS (
           SELECT *
           FROM master..sysprocesses p1
           WHERE p.spid = p1.blocked
               AND p1.spid <> p1.blocked
           )
       )
AND spid > 50
AND spid <> @@spid
ORDER BY CASE
       WHEN STATUS LIKE 'run%'
           THEN 0
       ELSE 1
       END
, waittime DESC
, open_tran DESC
 
cs


■ Lock 조회 및 해제

    > EXEC sp_lock
    > DBCC inputbuffer(@spid)
    > EXEC sp_who
    > EXEC sp_who @spid
    > EXEC KILL @spid


■ Lock 조회 쿼리-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
-- Active Session Query
SELECT
   sqltext.TEXT,
   req.session_id,
   req.status,
   req.command,
   req.cpu_time,
   req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext 
 
-- Lock Lists
SELECT DISTINCT
        name AS database_name,
        session_id,
        host_name,
        login_time,
        login_name,
        reads,
        writes        
FROM    sys.dm_exec_sessions
        LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
        INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE   resource_type <> 'DATABASE'
AND request_mode LIKE '%X%'
AND name ='DATABASE NAME'
ORDER BY name 
 
-> kill [session_id] 
 
-- Active Session 
SELECT DISTINCT
        name AS database_name,
        session_id,
        host_name,
        login_time,
        login_name,
        reads,
        writes
FROM    sys.dm_exec_sessions
        LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
        INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE resource_type <> 'DATABASE'
AND name ='DATABASE NAME'
ORDER BY name
 
cs

 

 

반응형

+ Recent posts