Skip to content

Что такое опережающее чтение?

Пересказ статьи Chad Callihan. What is a Read-Ahead Read?


Что такое опережающие чтения, и как они влияют на производительность SQL Server? Опережающие чтения позволяют SQL Server заглянуть вперед, чтобы извлечь страницы в буферный кэш прежде, чем они фактически будут затребованы для запроса. До 64 последовательных страниц могут быть прочитаны из файла, а возможность опережающего чтения может применяться как для страниц данных, так и для индексных страниц. Когда страницы оказываются в буферном кэше, то отпадает необходимость извлекать их с диска для будущих запросов, пока они не будут сброшены другими задачами SQL Server.

Опережающее чтение в действии


Для начала нам нужно проверить, чтобы была включена статистика ввода-вывода. Тогда мы сможем узнать число сканирований, логических чтений и т.д., но, что нам более важно, мы сможем посмотреть число опережающих чтений:

SET STATISTICS IO ON;
GO

Мы можем также для нашего примера выполнить следующий оператор, чтобы почистить буферы буферного пула, прежде чем выполнять какие-либо операторы SELECT. Это гарантирует, что мы увидим опережающие чтения, когда выполним наш первый запрос.

DBCC DROPCLEANBUFFERS;

Например, мы хотим сделать запрос к базе данных StackOverFlow2013 для получения top 10000 пользователей c id, меньшими 10000. Выполнив запрос SELECT, увидим следующие результаты:



Я получил 5888 строк. Если мы перейдем на вкладку Messages и посмотрим на статистику, то увидим 289 опережающих чтений, означающее, что SQL Server извлек 289 страниц.

Что случится, если мы выполним тот же запрос еще раз? Увидим ли мы теперь опережающие чтения?



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

Запрет опережающих чтений


Если вы по каким-либо причинам не хотите, чтобы выполнялись опережающие чтения, то можете включить флаг трассировки 652, чтобы запретить их:



Как видно выше, что даже при предварительной очистке буферов (DBCC DROPCLEANBUFFERS), выполнение нашего оператора SELECT показало 0 в числе опережающих чтений, поскольку был включен флаг трассировки 652.

Вы разрешаете опережающие чтения?


Опережающие чтения полезны с точки зрения улучшения производительности запросов, и они включены по умолчанию. Весьма вероятно, что они всегда будут включены и никогда не вызовут проблем.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.