Skip to content

Как работает буферный пул?

Пересказ статьи Randolph West. How does the buffer pool work?


Сегодня мы начнем рассмотрение буферного пула в SQL Server, и как он обычно используется. Прежде чем глубже погрузиться в буферный пул, нам потребуется напомнить себе некоторые фундаментальные вещи о том, как компьютеры обрабатывают и хранят информацию, т.к. это имеет отношение к пониманию работы буферного пула.
Компьютер состоит из четырех главных компонент. CPU, или центральное процессорное устройство, где выполняется компьютерный код и производятся вычисления. Я ранее описывал это как беспорядочное включение-выключение. CPU выполняет миллиарды циклов в секунду, поэтому ему необходимо отслеживать выполняемую обработку данных, сохраняя их на разных уровнях памяти. Современные процессоры имеют три или четыре уровня кэша или памяти на физическом кристалле. В любом элементе электроники кристалл - это поверхность, на которой печатаются схемы. Другими словами, мы можем думать об уровнях кэша как о встроенных непосредственно в CPU.

Это становится важным при рассмотрении того, как электроны двигаются на этом кристалле CPU. Самая быстрая память - это та, которая находится ближе всего к той части CPU, где выполняются вычисления. Она называется кэшем уровня 1 (L1). Обычно имеется 3 других уровня, называемых уровнями 2,3 и 4. На CPU с более чем одним ядром (обычная ситуация в наши дни), L3 и выше разделяется ядрами. Это делает её более медленной в силу блокирования, но, поскольку уровни все же встроены в CPU, они находятся намного ближе к операционному блоку и поэтому более быстрыми, чем основная память компьютера за пределами CPU, которая так же называется RAM (память с произвольным доступом) - нашей второй компонентой компьютера.

Эти различные кэши CPU оказываются слишком маленькими, чтобы сохранить, например, содержимое веб-страницы, поэтому CPU интенсивно использует RAM вместо кэша. Добавление RAM на сервер обычно делает SQL Server быстрей. RAM является непостоянной, изменчивой и временной. Много (много!) раз в секунду конденсаторы внутри микросхем RAM, хранящих эти биты данных, начинают протекать, и для поддержания заданных значений битов требуется подпитка электричеством, проходящего через RAM. Другими словами, если поток электричества остановится, содержимое RAM будет потеряно.

Третьей главной компонентой компьютера является слой хранения. За последние годы в этой области произошло много изменений, включая появление энергонезависимой памяти (так же известной как твердотельная) и постоянной памяти (которая использует немного магии за кулисами для хранения большей части используемых данных в памяти, но при поддержке постоянного хранилища). Однако несмотря на эти усовершенствования многие люди по-прежнему используют ротационные дисководы с магнитными головками чтения/записи (известными как магнитные хранилища). Ленты резервного копирования так же представляют собой форму магнитного хранилища, и прежде чем мы предположим, что оно пошло по пути дисковода гибких дисков, возможно, вам интересно будет узнать, что Amazon Glacier и Azure Cool Storage используют накопители на магнитных лентах для долговременных хранилищ низкой стоимости.

Четвертая главная компонента компьютера - это сетевая карта. Хотя современные NIC (network interface card) имеют собственный встроенный процессор для уменьшения нагрузки на ЦП компьютера, имеется несколько случаев, когда сетевые функции требуют обработки главным ЦП. Сеть является критичным элементом современной инфраструктуры, т.к. она функционирует как виртуальная плата виртуальных машин и сетевое хранилище типа SAN (storage area network - сеть хранения данных).

Теперь, когда мы вспомнили эти фундаментальные вещи, давайте присмотримся к буферному пулу.

Буферный пул в SQL Server находится в главной памяти компьютера (RAM). Когда движок базы данных запрашивает страницу данных для чтения или записи, предполагается, что она находится в буферном пуле. Буферный пул сам управляет доступом между RAM и хранилищем. Если запрашиваемая движком базы данных страница отсутствует в RAM, посылается запрос движку хранилища для извлечения этой страницы. Это может быть хранилище, подключенное непосредственно к системе или через сетевую карту.

Когда страница данных извлекается из хранилища, она помещается в буферный пул как побитовая копия. Начиная с SQL Server 2005, по умолчанию каждая страница данных содержит крошечную контрольную сумму в заголовке страницы (первые 96 байт страницы данных), которая проверяет, что данные в памяти являются теми же, что были прочитаны из слоя хранилища. Это критично, чтобы избежать повреждение. Наряду с ECC RAM (Error-Correcting Code memory - память с кодом исправления ошибок), это уменьшает возможность повреждения данных при их обработке в ЦП.

В качестве примера, давайте предположим, что мы выполняем запрос, который выбирает десять строк из таблицы. Запрос разбирается, компилируется и посылается в виде плана запроса в ЦП. Процессор просит у SQL Server страницы данных (либо из кластеризованных индексов, некластеризованных индексов либо куч), которые, в свою очередь запрашиваются из буферного пула. Буферный пул проверит, находится ли страница в памяти. Если нет, выдается ошибка страницы, и для получения страницы запрашивается движок хранилища. Как только страницы, требуемые для выполнения запроса оказываются в буферном пуле, запрос может быть запущен из ЦП, используя данные в памяти. Эти страницы будут оставаться в памяти в буферном пуле пока место не понадобится для чего-нибудь еще. Пресловутый счетчик Page Life Expectancy (ожидаемой продолжительности жизни страницы) - это то, что измеряет среднее количество времени, в течение которого страница данных остается в буферном пуле.

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

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

Комментарии

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

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

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

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

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

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