Почему «физическое чтение» меньше, чем «чтение с опережением» и «логическое чтение» в SQL Server для первого выполнения запроса? - PullRequest
3 голосов
/ 20 апреля 2011

Я перезапустил SQL Server 2005 и запустил запрос со статистикой ввода-вывода.

Я получил эти результаты: Таблица «ххх». Сканирование 1, логическое чтение 789, физическое чтение 3, чтение с опережением 794, ...

чтение с опережением - это количество прочитанных и помещенных в кэш страниц. Разве тогда физические чтения должны быть хотя бы одинаковыми?

Кроме того, поскольку это первый запуск запроса, не должно ли логическое чтение быть 0? Или SQL Server читает страницы физически, помещает их в кеш, а затем читает из кеша? Почему существует счетчик логических чтений, когда кеш должен быть пустым?

Ответы [ 3 ]

4 голосов
/ 20 апреля 2011

Все чтения являются логическими.

Некоторые также подвергаются физическому чтению и чтению с опережающим чтением, а также вводят страницы в кэш.

Предположительно, он прочитал вперед несколько страниц, которые на самом деле никогда не требовались вашим запросом, поэтому факт, что это число немного больше, чем фактическое логическое чтение.

3 голосов
/ 05 августа 2011

В документах от MS говорится, что "Read-Ahead Reads" читает страницы в кеш. Это не очень полезно ... можно предположить, что "Physical Reads" также помещает свою результирующую страницу в кеш.

Моя переформулировка того, что говорит MS, такова:

  • Физическое чтение - запрос блокируется в ожидании считывания страницы с диска в кэш для немедленного использования.
  • Read-Ahead Read - страница читается перед тем, как блокирует запрос, и читается в кэш, как и все чтения. Ожидания чтения возможны при сканировании индекса, и в этом случае следующие листовые страницы в индексе могут быть сочтены необходимыми, и чтение может быть начато для них до того, как запрос фактически скажет, что они нужны. Это позволяет диску быть занятым, пока механизм БД проверяет содержимое ранее извлеченных страниц.

Я не могу найти, чтобы они говорили это где-либо, но чтение вперед было бы бессмысленным, если бы это не то, что они действительно пытались сказать.

0 голосов
/ 20 апреля 2011

Я не знаю окончательного ответа здесь, но обновление статистики может также увеличить некоторые из этих чисел.

Как выглядит ваш запрос? Что такое редакция SQL Server?

Различные методы JOIN [Nested Loop, Merge Join, Hash Join] могут добавлять дополнительные логические чтения. Корпоративная версия имеет хорошие оптимизации опережающего чтения по сравнению с другими версиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...