Pull to refresh

Comments 13

UFO just landed and posted this here
Дежавю? А нет, вы действительно за 19.03.2014 написали эту фразу 17 раз, порой с перерывом менее 1 минуты к разным постам. Как успехи с кармой?
Ничуть не умаляя заслуги переводчика — по ссылке статья, немного больше раскрывающая тему. Ну и да — она от января 2008 года :)
+ по видам ожиданий, занимающих 80% статьи — msdn.microsoft.com/ru-ru/library/ms179984.aspx, но там машинный перевод, тут лучше, наверное (этот блок статьи не читал, так как читал в оригинале на MSDN)
Я не претендую на полное раскрытие темы. Объясню, почему перевел эту статью — когда сам анализирую ожидания, использую запрос из оригинала и использую комментарии автора именно этой статьи для того, чтобы понять, в чем может заключаться причина возникновения ожиданий.

Статья из MSDN (на которую, кстати, есть ссылка в переводе) содержит общее описание, по нему не всегда понятно, куда смотреть и что делать.

Статья по ссылке msdn.microsoft.com/ru-ru/magazine/cc135978.aspx содержит много полезной информации, но тема анализа ожиданий в ней не раскрыта почти совсем.
А что там раскрывать? Запрос на получение ожиданий, в том числе в % там есть, найти описание этих видов ожиданий труда не составляет.

Но получив, допустим, ожидание по IO или процессору >50% нужно понять, какими запросами оно сформировано, проанализировать планы их выполнения и т.д., ну а эти вопросы раскрыты в статье, в сжатом, но достаточном для применения основного инструмента объеме. Эта статья хороша тем, что там все в одном месте, если ссылка не нужна — минусуйте, если информация нужная — наоборот.

А может, там действительно оборудование не вывозит, что тоже может быть :)
Что раскрывать — я выше описал — по общему описанию типа ожидания в списке не всегда можно понять, чем оно вызвано. Ну или можно однозначно предположить, что проблема в одном, а по факту причина будет заключаться в другом.
В защиту перевода перед статьей из MSDN.

Все таки Paul S Randal — это Руссинович в MS SQL Server, бывший разработчик MS SQL, а ныне пишущий доступные для понимания очень правильные вещи. В общем, авторитетный товарищ. :)

Поэтому перевод его статьи это всегда приятно и полезно.
Наверное уже раз так в 20-тый захожу этот пост читать. Еще раз спасибо за полезный материал. Жаль, что нельзя второй раз плюсануть.

Прикреплю тут два скрипта, вдруг кому будет еще полезным.

1. Очистка sys.dm_os_wait_stats:

DBCC SQLPERF("sys.dm_os_wait_stats", CLEAR)

2. И слегка модифицированный запрос на выборку статистики ожиданий:

SELECT TOP(20)
      wait_type
    , wait_time = wait_time_ms / 1000.
    , wait_resource = (wait_time_ms - signal_wait_time_ms) / 1000.
    , wait_signal = signal_wait_time_ms / 1000.
    , waiting_tasks_count
    , percentage = 100.0 * wait_time_ms / SUM(wait_time_ms) OVER ()
    , avg_wait = wait_time_ms / 1000. / waiting_tasks_count
    , avg_wait_resource = (wait_time_ms - signal_wait_time_ms) / 1000. / [waiting_tasks_count]
    , avg_wait_signal = signal_wait_time_ms / 1000.0 / waiting_tasks_count
FROM sys.dm_os_wait_stats
WHERE [waiting_tasks_count] > 0
    AND max_wait_time_ms > 0
    AND [wait_type] NOT IN (
        N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR',
        N'BROKER_TASK_STOP', N'BROKER_TO_FLUSH',
        N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
        N'CHKPT', N'CLR_AUTO_EVENT',
        N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
        N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE',
        N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD',
        N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
        N'EXECSYNC', N'FSAGENT',
        N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
        N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'HADR_LOGCAPTURE_WAIT', N'HADR_NOTIFICATION_DEQUEUE',
        N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
        N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP',
        N'LOGMGR_QUEUE', N'ONDEMAND_TASK_QUEUE',
        N'PWAIT_ALL_COMPONENTS_INITIALIZED',
        N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
        N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
        N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
        N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH',
        N'SLEEP_DBSTARTUP', N'SLEEP_DCOMSTARTUP',
        N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
        N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP',
        N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
        N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT',
        N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
        N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS',
        N'WAITFOR', N'WAITFOR_TASKSHUTDOWN',
        N'WAIT_XTP_HOST_WAIT', N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
        N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
        N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT'
    )
ORDER BY [wait_time_ms] DESC
Я не тормоз, я просто не заметил нового комментария :)
В целом было бы неплохо актуализировать перевод, да. Но я не придумал пока способа это сделать, ибо из одной статьи у автора разросся целый раздел на сайте, где каждому отдельному ожиданию посвящена отдельная страница (На примере вашего: www.sqlskills.com/help/waits/cxconsumer).
А конкретно этому посвящена ещё и запись в блоге, т.к. ожидание было добавлено по просьбе самого автора этого поста: www.sqlskills.com/blogs/paul/cxconsumer-wait-type-history-and-what-you-need-to-know
И добавлено в SQL Server 2016, т.е. после появления этого перевода )
Sign up to leave a comment.

Articles