Published on

December 20, 2010

Исследование SQL Server: скрытые возможности DMV

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 и принимать обоснованные решения для оптимизации производительности и улучшения общей эффективности.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.