Новость из категории: Информация

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1

Запрос 2: просмотры индекса

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1

Подобно поведению, наблюдаемому для операций вставки-записи, мы можем оценить и влияние просмотров. Я выполню 10 операций чтения, использующих следующий запрос, который выполнит этот оператор SELECT последовательно 10 раз:
SELECT DBTypeID ,
DBType
FROM lifeboat.dbo.DatabaseTypes;
GO 10

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Просмотр некластеризованного индекса

Запрос выполняет просмотр некла-стеризованного индекса, как видно на плане выполнения (см. рисунок выше).

SELECT
--IDENTIFICATION:
DB_NAME(ixO.database_id) AS database__name,
O.name AS object__name,
I.name AS index__name,
I.type_desc AS index__type,

--LEAF LEVEL ACTIVITY:
ixO.leaf_insert_count ,
ixO.range_scan_count,

--LOCKING ACTIVITY:
ixO.row_lock_count ,
ixO.page_lock_count ,

--LATCHING ACTIVITY:
ixO.page_io_latch_wait_count

FROM sys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) AS ixO
INNER JOIN sys.indexes I
ON ixO.object_id = I.object_id
AND ixO.index_id = I.index_id
INNER JOIN sys.objects AS O
ON O.object_id = ixO.object_id
WHERE O.is_ms_shipped = 0;

SELECT O.name AS object__name,
I.name AS index__name,
I.type_desc AS index__type,
ixU.user_seeks,
ixU.user_scans,
ixU.user_lookups,
ixU.user_updates AS total_user_writes
FROM sys.dm_db_index_usage_stats AS ixU
INNER JOIN sys.indexes AS I
ON ixU.index_id = I.index_id
AND ixU.object_id = I.object_id
INNER JOIN sys.objects AS O ON ixU.object_id = O.object_id
WHERE ixU.database_id = DB_ID()
ORDER BY ixU.index_id ASC;

Расхождение в результатах двух объектов

Направляя запросы к объектам DMO sys.dm_ db_index_operalional_stats и sys.dm_db_index_usage_stats, мы видим расхождение в результатах двух объектов (см. код выше и рисунки ниже).

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Содержимое sys.dm_db_index_operational_stats

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Содержимое dm_db_index_usage_stats

Взгляните на индивидуальные сканирования диапазонов по некластеризованному индексу. Обратите внимание: это отдельные запросы к базе данных и они регистрируются как таковые в sys.dm db index_ usage stats. Это один из немногих случаев, когда обе конструкции да ют похожие результаты. Ситуация меняется при переходе к поискам.

Запрос 3: поиск в индексе

Можно было предположить, что мы сможем наблюдать последствия поиска в индексе таким же образом, как в случае с просмотрами. На этот раз придется использовать гораздо больший индекс, поскольку тот, с которым мы работаем, настолько мал, что оптимизатор запросов отдает предпочтение просмотру. Сравните следующий план выполнения (базовый запрос не имеет значения для данной темы) с результатами sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats для перезапущенного экземпляра SQL Server, у которого все предыдущие значения для этой DMF были равны 0 при использовании точно таких же диагностических запросов, как показанные выше. Это простая операция поиска в индексе, что видно из приведенного на рисунке ниже плана выполнения.

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Простая операция поиска в индексе

На первый взгляд результаты немного неожиданные для DMF рабочей статистики, но только потому, что я опустил важный элемент информации (см. рисунки ниже).

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Содержимое sys.dm_db_index_operational_stats

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Содержимое sys.dm_db_index_usage_stats

Поначалу не видно никаких различий между поисками (seek) и просмотрами (scan) в sys.dm_db_ index_operational_stats. Операция поиска в индексе записывается как один просмотр диапазона внутри этой DMF в данном случае. С другой стороны, выполняются ожидания относительно sys.dm_db_index_usage_stats. В этом системном представлении данная операция регистрируется как user_seek. Как вы думаете, почему это происходит?

Есть еще одно обстоятельство, которое я пока не отмечал: этот запрос возвращает многочисленные результаты. Кроме того, результаты могут быть получены за один просмотр диапазона. Поэтому метаданные, представленные в sys.dm_db_index_operational_stats, точно такие, как мы ожидали. Да, операция была поиском в индексе, как показано в плане выполнения, однако на самом деле, внутренне, это просмотр диапазона. Поэтому возникает вопрос: как правильно отражать влияние в DMV статистики использования — как поиск или просмотр?

SQL Server: DMF. Сопоставление sys.dm_db_index_operational_stats и sys.dm_db_index_usage_stats. Продолжение 1
Операция проявляется как поиск, а не просмотр диапазона

И наоборот, если выполнить запрос, который возвращает единственную строку, план выполнения выглядит идентично во всем, кроме имени индекса в качестве целевого объекта операции. Однако операция проявляется как поиск в sys.dm_db _index operational_stats, а не просмотр диапазона (см. рисунок выше).


Широкий список возможностей DMF в SQL Server подарил вам вдохновение для написание идеальной картины? В этом случае, я настоятельно советую вам сначала заглянуть на http://rosa.ua/catalog/123712_kholsty_i_drugie_osnovy/ (http://rosa.ua/catalog/123712_kholsty_i_drugie_osnovy/). Там вы найдете все, что вам потребуется для вашего творчества - холсты, планшеты для рисования и даже готовые рамы.


<<К началу статьи | Читать дальше...

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Перевести статью:

Похожие новости

Комментарии

Информация

^ Наверх