현재 수행중인 쿼리를 찾아서 어떠한 쿼리가 날아가고 있는지만 확인해도 DBA라면 대충은 무거운 쿼리인지 얼마나 걸릴 쿼리인지, 죽여야할 쿼리인지 정도는 예측할 수 있다, 따라서 현재 실행중인 쿼리를 찾아 먼저 어떤 쿼리인지 확인 하는 것이 중요하다.
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가 걸린 쿼리를 찾는 쿼리이다. 아무래도 다른 트랜잭션에 의해 참조되고 있어서 LOCK이 걸렸을 경우가 높다. 이런 경우에는 원인을 빠르게 찾아 KILL을 시킬 것인지 안시킬 것인지 파악하는 것이 중요하다.
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 ='dwehrdev' ORDER BY name
KILL sid
SELECT DISTINCT name AS database_name, session_id, resource_type, host_name, login_time, login_name, reads, writes FROM sys.dm_exec_sessions LEFT JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id WHERE resource_type <> 'DATABASE' AND name ='DWEHRDEV' ORDER BY name