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 подарував вам натхнення для написання ідеальної картини? У цьому випадку, я настійно раджу вам спочатку заглянути на https://rosa.ua/catalog/123712_kholsty_i_drugie_osnovy/ (https://rosa.ua/catalog/123712_kholsty_i_drugie_osnovy/). Там ви знайдете все, що вам потрібно для вашої творчості - полотна, планшети для малювання і навіть готові рами.




ІНШЕ

Sql server: пошук або сканування фото

Sql server: пошук або сканування

демонстраційні дані Демонстраційні дані для статті сформовані за допомогою коду, наведеного нижче. Код для створення…

» » Sql server: dmf. Зіставлення sys.dm_db_index_operational_stats і sys.dm_db_index_usage_stats. Продовження 1