SQL Server – мощная технология, которая всегда меня удивляет. Каждый день я открываю для себя новую и интересную информацию, выполняя запросы к представлениям динамического управления (DMV). Эти DMV предоставляют ценные сведения о том, что происходит под капотом SQL Server, позволяя нам оптимизировать производительность и улучшать общую эффективность.
Одна из скрытых возможностей DMV, которую я часто использую, – это sys.dm_exec_query_optimizer_info
. Этот DMV хранит записи о большинстве операций, выполняемых Оптимизатором запросов, предоставляя нам доступ к обширной информации, которую можно использовать для повышения производительности сервера.
Давайте рассмотрим пример запроса:
SELECT *
FROM sys.dm_exec_query_optimizer_info
WHERE counter IN ( 'optimizations' , 'elapsed time' , 'final cost' , 'insert stmt' , 'delete stmt' , 'update stmt' , 'merge stmt' , 'contains subquery' , 'tables' , 'hints' , 'order hint' , 'join hint' , 'view reference' , 'remote query' , 'maximum DOP' , 'maximum recursion level' , 'indexed views loaded' , 'indexed views matched' , 'indexed views used' , 'indexed views updated' , 'dynamic cursor request' , 'fast forward cursor request' )
Выполнив этот запрос, мы можем получить множество важной информации. Например, мы можем определить, сколько раз Оптимизатор был запущен и среднее время, затраченное на оптимизацию наших запросов. Мы также можем определить количество раз, когда были оптимизированы операторы обновления, вставки или удаления.
Одно практическое применение этого DMV – определение чрезмерного использования подсказок запроса. Анализируя результаты, я смог быстро определить, что клиент сильно полагается на подсказки запроса, которые иногда могут замедлить производительность, а не улучшить ее.
Если вы следите за моим блогом, вам может быть знакома моя серия статей о представлениях SQL Server и их ограничениях. С помощью sys.dm_exec_query_optimizer_info
я легко могу определить, сколько раз представления использовались в различных решениях внутри запроса.
Более того, этот DMV позволяет оценить влияние оптимизаций на настройку сервера. Например, мы можем рассчитать долю времени, в которой представление было использовано в общей оптимизации. Эта информация может быть ценной для понимания роли представлений в нашей базе данных.
Вот пример запроса, который рассчитывает долю времени, в которой представление было использовано:
SELECT
(SELECT CAST(occurrence AS FLOAT) FROM sys.dm_exec_query_optimizer_info WHERE counter = 'view reference') /
(SELECT CAST(occurrence AS FLOAT) FROM sys.dm_exec_query_optimizer_info WHERE counter = 'optimizations') AS ViewReferencedFraction
Важно отметить, что DMV sys.dm_exec_query_optimizer_info
включает как системные представления, так и DMV, поэтому числа могут отличаться в зависимости от вашей конкретной среды.
Используя возможности DMV, такие как sys.dm_exec_query_optimizer_info
, мы можем получить ценные сведения о внутренней работе SQL Server и принимать обоснованные решения для оптимизации производительности и улучшения общей эффективности.