본문 바로가기

프로그래밍/Database

[MS-SQL] How to Find Slow SQL Server Queries / sp_WhoIsActive

반응형



동영상은 (Adam Machnic이) sp_who와 sp_who2 에 대한 설명을 진행하고, 자신이 만들어 제공하는 sp_WhoIsActive 프로시져를 소개한다. 해당 프로시져는 ms-sql 2005, 2008 을 지원 (더 상세한 지원사사항등은 링크의 설명을 잘 확인하라). http://tinyurl.com/WhoIsActive 을 찾아 들어가면 다운로드 링크를 찾을 수 있다.


sp_who : status, loginname, dbname, cmd 등등을 보여준다. cmd 컬럼으로 update 중인지, delete 중인지 등을 확인할 수 있음.

sp_who2 : 이 컬럼들에 blkby (blocked by) 등 몇가지 컬럼을 추가로 보여준다.

 blkby 컬럼의 값을 기준으로 DBCC inputbuffer(64) 를 실행하면, 결과중 eventinfo 컬럼에서 블락하고 있는 쿼리를 볼 수 있다. 하지만, 쿼리는 한줄로 이어진 포맷되지 않은 쿼리이고 하여 불편.


이런 번거로운 작업을 간편하게 하기 위해 sp_whoisactive 라는 프로시져를 만들었고, tinyurl.com/WhoIsActive 링크를 찾아가서 받아볼 수 있다.


sp_whoisactive 를 실행하게 되면, 실제로 activee 한 쿼리세션들만 보여주게 되고, 실행 쿼리도 sql_text 컬럼의 링크를 통해 포맷된 형태로 보여준다. wait_info 컬럼에선 해당 쿼리가 무엇을 얼마나 기다리고 있는지를 보여준다.


다른 패러미터를 주어서 실행하면 더 많은 정보를 알려준다. 동영상에서는 get_plan, get_transaction_info 옵션을 활성화하였다. get_plan 옵션으로 query_plan 컬럼이 만들어지고, 결과 컬럼의 링크를 클릭하면, 해당 쿼리의 실행계획화면을 보여주게 된다.


tinyurl.com/WhoIsActive 로 가서 받는 쿼리는 sp_whoisactive 프로시져의 생성 스크립트이다. 해당 스크립트를 실행하여 유틸리티 쿼리를 만들어 설치해 놓고, 필요할 때마다 실행해 보면 되겠다.



728x90