Как sql Server выполняет запросы?
Для выполнения позовательского запроса Sql Server использует планировщик (scheduler). Каждый планировщик относится к одному из процесоров. В каждый момент времени планировщик может работать только с одной пользовательской сессией (session).
Если сессия имеет статус "running" это означает что у неё есть все необходимые ресурсы и находится в процессе выполнения.
Если сессия имеет статус "runnable" значит она ждет пока осводится один из планеровщиков. В заданный момент времени таких ждущих сессий может быть много и они образуют очередь "runnable".
Если запрос имеет статус "suspended" это означает что он переведен в другую ждущую очередь "waiting". Сессии находящиеся в этой очереди находится в ожидании ресурсов другого типа (блокировки, диск, память, сеть). Каждой сессии ставится в соответствие причина ожидания и отслеживается время проведенное в ждущем режиме.Как только необходимый ресурс становится доступен, сессия снова переводится в очередь "runnable" и продолжает ждать пока планировщик освободится для выполнения запроса.
Request Lifecycle
Видно, что задержки при выполнении запроса происходят по множеству причин. Эти причины нужно отслеживать и анализировать. Для этих целей Sql Server имеет целый ряд инструментов:
Во-первых в Performance Monitor есть целая серия
SQLServer:Wait Statistics в которую входят счетчики:
Lock waits, Lock waits, Log buffer waits, Log write waits, Memory grant queue waits, Network IO waits, Non-Page latch waits, Page IO latch waits, Page latch waits, Thread-safe memory objects waits, Transaction ownership waits, Wait for the worker, Workspace synchronization waits
для каждого из этих счетчиков можно отслеживать следующие параметры:
Average wait time (ms), Cumulative wait time (ms) per second, Waits in progress, Waits started per second
Во-вторых существует системное представление sys.dm_os_wait_stats отображающее накопительную информацию по различным причинам задержек.
В-третьих полезным механизмом мориторинга являются события Extended Events. В частности, пример их использования описан в статье Debugging slow response times in SQL Server 2008. В этой статье приводится ссылка на другую статью обязательную для прочтению
Troubleshooting Performance Problems in SQL Server 2005
Средства сбора статистики по задержкам есть в большинстве современны СУБД
Tuning with Wait Stats in Oracle and SQL Server
Другие статьи:
SQL Server Best Practices Article
TechEd - IO and Wait Stats
Perf Tuning with waits statistics
SQL Server Wait Events: Taking the Guesswork out of Performance Profiling
Комментариев нет:
Отправить комментарий