대기를 유발하는 쿼리 찾기


34

특정 종류의 대기가 주어지면 프로덕션 SQL 2008 R2 서버에서 대기를 안전하게 유발하는 쿼리를 어떻게 찾을 수 있습니까?

이 특별한 경우에 대해 궁금 async_network_io합니다.

답변:


32

이것을 확인하는 가장 좋아하는 방법은 Adam Machanic의 뛰어난 sp_WhoIsActive 저장 프로 시저를 사용하는 것입니다. 사용 방법 및 코드 다운로드 링크에 대한 비디오는 다음과 같습니다.

http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/

문제는 결과를 확인하기 위해 주기적으로 실행해야한다는 것입니다. 이 데이터를 주기적으로 수집하려면 sp_WhoIsActive 결과를 테이블에 캡처하는 방법에 대한 Kendra Little의 자습서를 확인하십시오.

http://www.littlekendra.com/2011/02/01/whoisactive/

마지막으로 쿼리가 async_network_io를 기다릴 때마다 실행해야 할 경우 확장 이벤트라는 새로운 도구를 사용할 수 있습니다. SQL Server 엔진 내부의 디버그 지점과 마찬가지로 마술을 일으킬 수 있습니다. 솔직히, 2008 년에 지금 사용하는 것은 약간 고통 스럽습니다.


14

'async_wait_io'는 대기 유형이 아닙니다. 가능한 ASYNC % 대기 유형은 다음과 같습니다.

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

대기 유형에 대한 몇 가지 좋은 링크 :

현재 대기를 찾기위한 쿼리로 이동합니다.

SELECT  req.session_id
       ,blocking_session_id
       ,ses.host_name
       ,DB_NAME(req.database_id) AS DB_NAME
       ,ses.login_name
       ,req.status
       ,req.command
       ,req.start_time
       ,req.cpu_time
       ,req.total_elapsed_time / 1000.0 AS total_elapsed_time
       ,req.command
       ,req.wait_type
       ,sqltext.text
FROM    sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN    sys.dm_exec_sessions ses
        ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'

죄송합니다. async_network_io를 의미했습니다.
Kyle Brandt

다른 아주 좋은 기사 : Brent O와 Buck WoodyWait 통계로 대기 통계를 잃어 버리십시오 . 그들은 매우 가치가 있습니다!
Marian

@Marian : 브렌트는 오늘 나에게 몇 가지 물건을 보여 주었지만 우리가 이것에 도달하기 전에 시간이 부족했을 수도 있습니다. 아마도 그 기사는 좋을 것입니다 :-)
Kyle Brandt

@Kyle 당신은 Brent에게 당신에게 물건을 보여주고 여전히 우리에게 물어 보도록 했습니까? :) 당신은 그를 사무실에있는 의자에 묶어야합니다. 그의 머리를 말리십시오. 그리고 결과를 알려주는 것을 잊지 마십시오!
Marian

@Marian : 응 그의 도움을 매우 행운입니다. 문제는 여기에 대답이 있다면 인터넷의 다른 모든 사람들도 대답을 얻는 것입니다 :-)
Kyle Brandt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.