Статистика и виды ожиданий. День № 2

Статистика и виды ожиданий. День № 2Первый вопрос, который нам надо разобрать — Когда происходят ожидания?

Ответ достаточно прост: когда SQL Server выполняет запрос и вынужден ждать ресурсы для него, в этот момент SQL Server регистрирует задержку/ожидание. Позже мы можем анализировать эти задержки, чтобы понять их причину и возможно устранить их. Не всегда возможно устранить задержки на 100%.

Прежде чем мы продолжим, мы должны понимать 3 этапа жизни запроса:

Running — запрос выполняется на стороне CPU.

Runnable – запросы, которые готовы к выполнению и ожидают своей очереди для вызова. Другими словами, запрос готов, но ожидает освобождения процессора, который выполняет другой запрос.

Suspended — запрос, который ожидает по какой либо причине (вы их знаете, они были изучены в День № 1) перевода его в статус runnable. Другими словами это время (wait time), которое мы пытаемся уменьшить.

Иными словами время выполнения запроса состоит из Running + Suspended + Runnable.

Позвольте мне объяснить это на простом примере «такси и пассажир»

Двое друзей, Том и Дэнни, поехали в торговый центр вместе. Когда они вышли их торгового центра, они решили взять такси. Том и Дэнни стоят ожидая их очереди поймать такси. Начинается их время ожидания (wait time), они готовы сесть в такси, но такси обслуживает других клиентов и они должны ждать своей очереди. Другими словами они находятся в состоянии runnable.

Теперь, когда пришла их очереди сесть в такси, таксист говорит им, что не принимает кредитные карты. Ни Том и Дэнни не взяли с собой наличные деньги. Тогда им приходится отпустить таксиста, так как он не может ждать и пойти за деньгами к банкомату. Том и Дэнни не смогут уехать, пока не снимут деньги. Сейчас они находятся в состоянии suspended.

Как только они получили наличные, они снова становятся в очередь за такси, создавая очередной сигнал для ожидания (wait time). На этот раз у них есть наличные деньги, чтобы добраться до дома. Время, затраченное такси, чтобы добрать от торгового центра до дома это ни что иное как состояние running.

Я надеюсь, что данный пример помог вам лучше понять систему ожиданий.

Следующий запрос, созданный Glenn Berry, поможет вам понять процентное соотношение ожиданий в системе:

SELECT CAST(100.0 * SUM(signal_wait_time_ms) / SUM (wait_time_ms) AS NUMERIC(20,2))
AS [%signal (cpu) waits],
CAST(100.0 * SUM(wait_time_ms - signal_wait_time_ms) / SUM (wait_time_ms) AS NUMERIC(20,2))
AS [%resource waits]
FROM sys.dm_os_wait_stats OPTION (RECOMPILE);

По-моему опыту, когда система более или менее стабильна, то ожидание CPU (первый столбец) будет ниже 20%. Но повторюсь, это не абсолютное значение, которое можно оспорить.

В будущих статьях мы обсудим конкретные типы ожиданий и варианты их устранения.

Читайте все посты этой серии

Автор: Pinal Dave

***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***
Полезные Скрипты

Рубрика Проверь себя

Ссылка на наш канал YouTube

Запись опубликована в рубрике Cтатистика и виды ожиданий (Wait Stats and Wait Types) с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: