SOS_SCHEDURLER_YIELD 대기와 쿼리 식별

 

  • Version : SQL Server 2008, 2008R2, 2012

 

SOS_SCHEDULER_YIELD 대기 유형의 문제점 중 하나는 실제로 대기 유형이 아니다는 것이다. 이 대기 유형의 발생은 4ms 스케줄링 퀀텀에 따른 자발적인 CPU 양보로 인해 실행중인 스레드를 반환하고 실행 가능한 큐의 맨 아래로 이동하기 때문이다. 그리고 SOS_SCHEDULER_YIELD를 사용하여 대기 프로세스에 등록된다.

 

대기 유형에 대한 자세한 내용은 다음 포스트를 참고 한다.

  • SOS_SCHEDULER_YIELD waits and the LOCK_HASH spinlock :

http://www.sqlskills.com/blogs/paul/sos_scheduler_yield-waits-and-the-lock_hash-spinlock/

  • Knee-Jerk Wait Statistics : SOS_SCHEDULER_YIELD :

http://sqlperformance.com/2014/02/sql-performance/knee-jerk-waits-sos-scheduler-yield

 

SOS_SCHEDULER_YIELD 대기는 실제 대기 유형이 아니기 때문에 sys.dm_owS_waiting_tasks DMV에서 확인 할 수 없다. 따라서 sys.dm_exec_requests를 사용하여 실행중인 쿼리에 대해 last_wait_type가 SOS_SCHEDULER_YIELD인 상태의 쿼리와 실행계획을 확인할 수 있다.

SELECT

[er].[session_id],

[es].[program_name],

[est].text,

[er].[database_id],

[eqp].[query_plan],

[er].[cpu_time]

FROM sys.dm_exec_requests [er]

INNER JOIN sys.dm_exec_sessions [es] ON

[es].[session_id] = [er].[session_id]

OUTER APPLY sys.dm_exec_sql_text ([er].[sql_handle]) [est]

OUTER APPLY sys.dm_exec_query_plan ([er].[plan_handle]) [eqp]

WHERE

[es].[is_user_process] = 1

AND [er].[last_Wait_type] = N'SOS_SCHEDULER_YIELD'

ORDER BY

[er].[session_id];

GO

 

 

 

[참고자료]

http://www.sqlskills.com/blogs/paul/identifying-queries-with-sos_scheduler_yield-waits/?utm_source=rss&utm_medium=rss&utm_campaign=identifying-queries-with-sos_scheduler_yield-waits

 

 

2015-05-08 / 강성욱 / http://sqlmvp.kr

 

 

SQL Server, MSSQL, DMV, last_wait_type, SOS_SCHEDULER_YIELD, 쿼리 튜닝, 대기유형, DB튜닝, SQL튜닝, SQL분석

+ Recent posts