Я виконую запит, який виробляє план:
Статистика 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. Один "робочий файл" означає рівно одну таблицю, яка використовується з однією метою?
Якщо більше одного робочого файла / робочого столу, я не можу знати, для якої операції він використовується?