본문 바로가기
카테고리 없음

sp_who2

by soLow 2016. 2. 26.
SMALL

sql server 를 사용하다보면 lock 이 걸리는 경우가 있다…

 

select 를 하는경우에도 table 뒤에 with(nolock) 이란 옵션을 주지않으면

select 가 끝날때까지 대기를 해야하는 경우가 있다

 

 

exec sp_who2

image

sp_who2는 sp_who 와함께 내장 프로시저중 가장 널리 사용된다.

sp_who2 를 사용할때 결과가 소팅하지 않거나 파라메터를 주지 않으면…

별도음이 되지 않을수있다…서버의 규모가 클수록 소팅이나 파라미터가 필수적이다.

 

임시 테이블에 해당 결과를 저장한후 소팅과 필터링을 하여 사용하는 방법이 있다.

image

 

출처 : http://www.sqlmatters.com/Articles/sp_who2%20-%20filtering%20and%20sorting%20the%20results.aspx

 

하지만 내가 운영하는 서버는 규모가 아주 크진않아서 그냥 sp_who2 명령어를 그냥 사용하곤한다.

 

해당 쿼리의 결과 내용중에 어떤 쿼리가 테이블을 잠그고 있는지 보고싶다면…

 

spid 를 조회하면된다

 

dbcc inputbuffer(59)

 

위처럼 조회를 하게된다면.

 

 

image

 

eventinfo를 볼수 있다.

 

cntr + c , cntr + v 해보면 어떤쿼리가 돌고있는지 확인이 가능하다..

 

또 blkby 라는 컬럼이 있는데…

 

해당 쿼리가 suspended 상태( 즉 지연되고 있다면) 어떤 쿼리가 블럭하고 있는지 추적을 할 수 있다.

 

 

 

매월 마감때만 되면 무수한 쿼리들이 시스템 내부에서 충돌을한다.

 

특히나 한달간 일어난 모든 매출자료들을 한꺼번에 계산을 하는중엔…

 

응답이 느린 쿼리가 실행중엔 다른 쿼리들의 응답이 지연되거나..블럭 될 수 있다.

 

 

Process status. The possible values are:

dormant. SQL Server is resetting the session.

running. The session is running one or more batches. When Multiple Active Result Sets (MARS) is enabled, a session can run multiple batches. For more information, see Using Multiple Active Result Sets (MARS).

background. The session is running a background task, such as deadlock detection.

rollback. The session has a transaction rollback in process.

pending. The session is waiting for a worker thread to become available.

runnable. The session's task is in the runnable queue of a scheduler while waiting to get a time quantum.

spinloop. The session's task is waiting for a spinlock to become free.

suspended. The session is waiting for an event, such as I/O, to complete.

 

상태값중에 특이하게….

DORMANT

위와같은 상태값이 있다…

의미는

 

활동하지 않고 잠재된이란 뜻이다…

SQL Server is resetting the session.

메뉴얼에는 위와같이 나오는데 세션을 리셋하는 상태라고한다…

 

아무래도..커넥션만 맺은 그런 상태인줄알았는데…쿼리 취소하는 경우인모양이다

 

관리자로 로그인하여 블럭 된 쿼리를 보고 있으면 애플리케이션에서 실행되는 쿼리도 있지만 다른 관리자의 select 명령들도 볼 수 있고 무슨 의도를 가지고 있는지도 알 수 있다…

 

 

아무래도 마감때 쿼리 응답이 없으니 이런저런 쿼리를 돌리는것 같다..

 

 

sp_who 란 명령어도 있다…보여주는 정보는 sp_who2 보다 적지만 기본적인 사용방법이 같다..

 

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
 
줄수 있는 파라미터로는 로그인값에 나오는 사용자를 지정하거나
상태값으로 조회를 하는 ‘active’ ( 이걸 자주 사용한다 )
세션아이디를 줘서 하나의 상태만 추적할수도있다
 
 
 
 
 
 
 
참조 문서
https://technet.microsoft.com/en-us/library/ms174313%28v=sql.110%29.aspx?f=255&MSPPError=-2147217396
LIST