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

Что касается KB314648, то все в порядке, если Профилировщик сообщает о более высоких числах, чем Статистика IO. Но Profiler показывает 92283чтение по описанному запросу, то же самое выполнение. Означает ли это, что Profiler не учитывает чтения из рабочих файлов / рабочих таблиц?

2. В чем разница между «рабочим столом» и «рабочим файлом»

Я обнаружил, что:

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

Есть ли какая-то физическая разница между ними?

3. Почему в данном конкретном случае есть «Рабочий стол»?

Почему у меня вообще есть рабочий стол, если есть 0 логических чтений? Он включен в статистику IO только потому, что в этом может возникнуть необходимость (в случае неверных оценок)?

Описание, найденное на Technet, кажется расплывчатым.

4. Что означает «физическое чтение» в Workfile?

Означает ли это, что для запроса недостаточно памяти, поэтому данные должны были записываться на диск во время выполнения запроса (предупреждение о совпадении хэша)? Могу ли я предположить, что всякий раз, когда я вижу рабочий стол / рабочий файл в статистическом ввод-выводе с физическим чтением, для запроса не выделяется достаточно памяти, и некоторые промежуточные результаты запроса должны быть записаны на диск tempdb? И всякий раз, когда я вижу только логическое чтение, используется ОЗУ?

5. Один «рабочий файл» означает ровно одну таблицу, которая используется для одной цели?

Если есть больше, чем один рабочий файл / рабочий стол, то я не могу знать, для какой операции он используется?

Яниса
источник
Что за предупреждение о хеш-совпадении? Это разлив из базы данных?
Том V - Команда Моника
@ TomV, да - уровень разлива 1 и уровень разлива 2.
Янис

Ответы:

15

1. Почему статистика ввода-вывода показывает больше чтений, чем профилировщик?

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

2. В чем разница между «рабочим столом» и «рабочим файлом»

Оба являются внутренними объектами; в противном случае это в значительной степени соответствует именам: рабочая таблица имеет табличную структуру, рабочий файл имеет файловую структуру. Подробная структура не видна, хотя некоторые широкие возможности можно определить, проверив их методы и следуя их путям выполнения с помощью отладчика.

3. Почему в данном конкретном случае есть «Рабочий стол»?

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

4. Что означает «физическое чтение» в Workfile?

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

5. Один «рабочий файл» означает ровно одну таблицу, которая используется для одной цели?

Насколько я помню, может быть несколько случаев. Я не знаю, как связать конкретную STATISTICS IOлинию с конкретным объектом или узлом плана. Это давнее ограничение. Это может быть изменение в SQL Server 2016, хотя я не проверял, применимо ли это к внутренним временным объектам.

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

Пол Уайт говорит, что GoFundMonica
источник