Гибридный буферный пул

Область применения: SQL Server 2019 (15.x) и более поздних версий

Гибридный пул буферов позволяет объектам буферного пула ссылаться на страницы данных в файлах базы данных, находящихся на устройствах с постоянной памятью (PMEM), а не получать копии страниц данных с диска и кэширование их в переменной DRAM. Эта функция появилась в SQL Server 2019 (15.x) и более расширена в SQL Server 2022 (16.x).

Схема, показывающая буферный пул с включенным гибридным буферным пулом и без нее.

Устройства энергонезависимой памяти (PMEM) поддерживают байтовую адресацию. Если используется файловая система с режимом прямого доступа (DAX), поддерживающая энергонезависимую память (например, XFS, EXT4 или NTFS), доступ к файлам в файловой системе осуществляется с помощью обычных API файловой системы в ОС. Кроме того, SQL Server может выполнять операции загрузки и хранения данных для карт памяти файлов на устройстве PMEM. Это позволяет приложениям с поддержкой PMEM, таким как SQL Server, получать доступ к файлам на устройстве без обхода традиционного стека хранилища.

Гибридный пул буферов использует эту возможность для выполнения операций загрузки и хранения сопоставленных файлов с памятью, чтобы использовать устройство PMEM как в качестве кэша для буферного пула, так и расположения хранилища для файлов базы данных. Это создает уникальную ситуацию, когда как логическое чтение, так и физическое чтение становятся по сути одной и той же операцией. Устройства энергонезависимой памяти доступны через шину памяти так же, как и обычная непостоянная память DRAM.

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

Функция гибридного буферного пула доступна в Windows и Linux. Устройство PMEM должно использовать файловую систему, поддерживающую DAX (DirectAccess). Все файловые системы XFS, EXT4 и NTFS поддерживают расширения DAX, предоставляющие доступ к файловой системе непосредственно из пользовательского пространства. SQL Server обнаружит, находятся ли файлы данных базы данных на соответствующем устройстве диска PMEM и автоматически выполняют необходимое сопоставление памяти файлов базы данных при запуске базы данных или при подключении, восстановлении или создании базы данных.

Дополнительные сведения см. в разделе:

Включение гибридного буферного пула

SQL Server 2019 (15.x) представляет динамический язык данных (DDL) для управления гибридным буферным пулом.

В следующем примере гибридный буферный пул включается для экземпляра SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

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

В следующем примере гибридный буферный пул включается для конкретной базы данных.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

По умолчанию гибридный буферный пул включен на уровне базы данных.

Отключение гибридного буферного пула

Следующий пример отключает гибридный буферный пул на уровне экземпляра:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

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

В следующем примере гибридный буферный пул отключается для конкретной базы данных.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

По умолчанию гибридный буферный пул включен в области базы данных и отключен в области сервера.

Просмотр конфигурации гибридного буферного пула

Отображение значения времени выполнения

Следующий пример возвращает текущее состояние конфигурации гибридного буферного пула для экземпляра.

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

В следующем примере перечислены базы данных и параметры уровня базы данных для гибридного буферного пула (is_memory_optimized_enabled).

Вы также можете подключить или отформатировать модуль PMEM без включения DAX и рассматривать его как обычное блочное устройство (то есть выполнять операции ввода-вывода через ядро). При настройке таким образом модули PMEM не могут использоваться SQL Server для выполнения байт-адресных операций (т. е. все вызовы будут использовать драйверы пространства ядра).

SELECT name, is_memory_optimized_enabled FROM sys.databases;

Гибридный пул буферов с прямой записью

Гибридный пул буферов с поведением прямой записи уменьшает количество memcpy команд, которые необходимо выполнить на измененных страницах данных или индексов, размещенных на устройствах PMEM. Это делается с помощью устойчивого сохраненного буфера журнала в качестве средства для изменения страницы без необходимости копировать его в один из пулов буферов DRAM. Вместо этого страницы в файлах базы данных, размещенных на устройствах PMEM, изменяются непосредственно без необходимости кэшировать в буферном пуле DRAM, а затем асинхронно сбрасывать на диск. Это поведение по-прежнему соответствует семантике предварительного ведения журнала (WAL), так как записи (журнал) в сохраняемом буфере журнала транзакций были записаны или защищены для устойчивых носителей. Значительное повышение производительности наблюдалось для транзакционных рабочих нагрузок с помощью гибридного буферного пула и сохраняемого буфера журнала вместе таким образом.

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

Рекомендации по гибридному пулу буферов

  • При форматировании PMEM-устройства в Windows используйте максимальный размер единицы размещения, доступный для файловой системы NTFS (2 МБ в Windows Server 2019 и более поздних версий), и отформатируйте устройство для DAX (Direct Access).

  • Включите страницы блокировки в политике памяти в Windows.

  • Размеры файлов должны быть кратны 2 МБ (деление по модулю на 2 МБ должно давать ноль).

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

  • С включенным параметром области сервера для гибридного буферного пула можно использовать параметр области базы данных, чтобы отключить функцию для отдельных пользовательских баз данных.

  • По состоянию на SQL Server 2019 (15.x) CU 3 (см . KB4538118), кэширование чтения было включено по умолчанию, процесс отслеживания самых горячих страниц в гибридном буферном пуле, а затем автоматически повышен до пула буферов DRAM для повышения производительности.

  • По состоянию на SQL Server 2022 (16.x) CU 1 прямая запись — это поведение по умолчанию, когда гибридный буферный пул объединяется с сохраненным буфером журнала. Это должно повысить производительность почти для всех рабочих нагрузок, но всегда есть вероятность регрессии, и накопительный пакет обновления должен быть тщательно проверен перед применением. При возникновении регрессии из-за этого изменения поведения можно вернуться к предыдущему поведению с помощью флага трассировки запуска 898.

  • Начиная с SQL Server 2022 (16.x) CU 1, флаг трассировки 809 будет игнорироваться SQL Server при запуске. Флаг трассировки 809 и флаг трассировки 898 применяются только к Windows и не применяются к SQL Server на Linux. Флаги трассировки следует использовать только при перенаправлении для этого сертифицированным специалистом Microsoft Server.