ВИСТАВКА СТАТИСТИКИ IO - робочий стіл / робочий файл


21

Я виконую запит, який виробляє план: введіть тут опис зображення

Статистика IO:

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Отже, деякі питання

1. Чому IO статистики показує більш високі показники, ніж Profiler? .

Що стосується KB314648, це нормально, якщо Profiler повідомляє про більші числа, ніж статистичні дані. Але Profiler показує, що 92283читає за описаним запитом, таке ж виконання. Чи означає це, що Profiler не рахує читання робочого файла / робочого столу?

2. У чому різниця між "Worktable" та "Workfile"

Я виявив, що:

  • робочі файли можуть бути використані для зберігання тимчасових результатів для хеш-з'єднань та хеш-агрегатів.
  • робочі таблиці можуть бути використані для зберігання тимчасових результатів для котушки запитів, змінних lob, змінних XML та курсорів.

Чи є якась фізична різниця між ними?

3. Чому саме в цьому конкретному випадку є "Worktable"?

Чому я взагалі маю робочий стіл, якщо є логічне читання? Його включають у статистику ІО лише тому, що в цьому може виникнути потреба (у разі поганих оцінок)?

Опис, знайдений на технет, здається неясним ..

4. Що означає "Фізичні читання" на Workfile?

Чи означає це, що для запиту було недостатньо пам'яті, тому дані потрібно було записати на диск під час виконання запиту (жовте попередження на Hash Match)? Чи можу я припустити, що коли я бачу робочий стіл / робочий файл у статистиці IO з фізичними читаннями, на запит не вистачає пам'яті, а деякі проміжні результати запиту повинні бути записані на диск tempdb? І коли я бачу лише логічні зчитування, використовується оперативна пам'ять?

5. Один "робочий файл" означає рівно одну таблицю, яка використовується з однією метою?

Якщо більше одного робочого файла / робочого столу, я не можу знати, для якої операції він використовується?


Яке попередження про хеш-матч? Це розлив tempdb?
Том V - Команда Моніки

@TomV, так - рівень розливу 1 та рівень розливу 2.
Jānis

Відповіді:


15

1. Чому IO статистики показує більш високі показники, ніж Profiler?

Не маю ідеї, вибачте. Часто існують відмінності, оскільки вони вимірюють різні речі, про які йдеться у статті бази знань. Немає додаткової документації щодо цього, про яку я знаю. Можливо, ви зможете зробити висновки про деякі деталі шляхом детального тестування, але насправді немає гарантії, що ви знайдете, залишатиметься послідовною у різних версіях та версіях. Передбачувана поведінка є досить непослідовною, перш ніж облік можливих помилок .

2. У чому різниця між "Worktable" та "Workfile"

Обидва є внутрішніми об'єктами; в іншому випадку це майже те, що підказують назви: робочий стіл має структуру, схожу на таблицю, робочий файл схожий на файл. Детальна структура не видно, хоча деякі широкі особливості можна виявити, перевіривши їхні методи та дотримуючись шляхів їх виконання за допомогою налагоджувача.

3. Чому саме в цьому конкретному випадку є "Worktable"?

Робоча таблиця завжди потрібна для операції хешування (режим рядка). Він використовується внутрішньо для розподілу вхідних даних у хеш-розділи (перевантажений термін, не пов'язаний з розділенням таблиць) та для відстеження стану. Я ніколи не бачив, щоб хеш-робоча таблиця звітувала щось інше, ніж нуль у статистиці, але тоді я ніколи не переглядала це.

4. Що означає "Фізичні читання" на Workfile?

Робочі файли є частиною механізму, який використовується, коли хеш-розділ розливається. Хоча це не зафіксовано документально, фізичні чи зчитувані наперед читання виникають, коли механізм виконання завантажує розлиті хеш-розділи з робочих файлів.

5. Один "робочий файл" означає рівно одну таблицю, яка використовується з однією метою?

Наскільки я пам’ятаю, може бути кілька випадків. Я не знаю, як я можу пов’язати певний STATISTICS IOрядок із певним об'єктом чи вузлом плану. Це давнє обмеження. Це може бути змінено в SQL Server 2016, хоча я не перевіряв, чи стосується він внутрішніх тимчасових об'єктів.

Зрештою, з цього не так багато корисного можна дізнатисяSTATISTICS IO результатів роботи робочих файлів та робочих столів, за межами яких ви можете дізнатися, переглянувши іншу інформацію в плані після виконання (або через DMV, розширені події тощо). Прошу вибачення за неповну відповідь, але це найкраще, що я можу запропонувати вгорі голови.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.