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 |
[참고자료]
2015-05-08 / 강성욱 / http://sqlmvp.kr
SQL Server, MSSQL, DMV, last_wait_type, SOS_SCHEDULER_YIELD, 쿼리 튜닝, 대기유형, DB튜닝, SQL튜닝, SQL분석
'SQL Server > SQL Server Tip' 카테고리의 다른 글
백업 압축과 추적플래그 3042 (0) | 2015.07.23 |
---|---|
SQL Server에서 MySQL 링크드서버 연결하기 (0) | 2015.07.23 |
랜덤 캐릭터 생성하기 (0) | 2015.07.23 |
트랜잭션로그 파일이 손상된 데이터베이스 복원 하기 (0) | 2015.07.23 |
트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기 (0) | 2015.07.23 |