MSSQL에서 쿼리를 열심히 작성해서 실행했는데 한 시간 그리고 두 시간이 지나도 끝나지가 않는다
이럴 때 문제를 확인하고 문제를 해결하는 방법은 명령어 4개이다 MSSQL에서 쿼리를 열심히 작성해서 실행했는데 한 시간 그리고 두 시간이 지나도 끝나지가 않는다 이럴 때 문제를 확인하고 문제를 해결하는 방법은 명령어 4개이다 1. 오래 걸리는 쿼리(Query) 확인 현업에서 SQL을 사용하게 되면 세미콜론(;)을 사용해서 여러 개의 쿼리를 한꺼번에 사용하곤 하는데 이때 UP DATE나 INS ERT에서 DB 락(Lock)이 발생하곤 한다. 때론 SEL ECT에서 오랜 시간 종료되지 않는 쿼리를 만날 수 도 있다. 이 상황을 타파하기 위해서는 3가지 명령어면 충분하다. 1. sp_lock : 현재 DB에 Lock이 걸린 내역이 있는지 확인 2. sp_who2 : 어떤 쿼리들이 동작하고 있는지 확인 3, dbcc inputbuffer("SPID") : 현재 Lock 걸린 쿼리를 확인 4. KILL "SPID" : Lock 걸린 쿼리를 종료 1. sp_lock sp_lock 명령어는 저장 프러시저로 시스템에서 제공하는 명령어이다. 간단하게 이야기하자면, Mode에서 X라고 되어 있는 부분이 현재 Lock이다. ![]() 2. sp_who2 sp_who2 명령어는 누가 어떤 쿼리를 사용하고 있는지를 알 수 있다. 또한 쿼리가 현재 어떤 상태로 진행되고 있는지를 확인할 수 있다. Login 컬럼에서 어떤 사용자가 사용 중인지가 입력되어 있다. HostName 컬럼에는 그 사용자의 컴퓨터의 IP가 확인된다. DBName 컬럼에서 문제가 되고 있는 쿼리가 동작 중인 DB를 알 수 있다. Command 칼럼은 문제가 되는 쿼리의 명령어가 무엇인지 알려준다. CPUTime 내역을 보면 문제가 되는 쿼리가 얼마나 지연시키고 있는지를 보여준다. ![]() 3. dbcc inputbuffer("SPID") dbcc inputbuffer("SPID") 명령어는 문제가 발생 중인 SQL을 확인할 수 있게 한다. 4. KILL "SPID" 문제가 되는 SQL을 확인했으면, KILL "SPID" 명령어로 문제가 된 쿼리를 종료시킨다. 그 후 문제가 되는 쿼리를 수정한다. 문제의 대부분은 너무나 많은 양을 불러와서 조인하거나 전체 인텍스를 Search 하는 like 같은 조건문이 문제를 만든다. 문제가 발생할 소지가 있는 쿼리들은 부분 쿼리를 실행시키면서 동작 시각을 확인하고 추진하는 것이 현명하다.
|
|||||||||||