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

Применимо к: 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) с накопительным пакетом обновления 1 прямая запись является поведением по умолчанию, когда гибридный буферный пул объединяется с сохраненным буфером журналов. Это должно повысить производительность практически для всех рабочих нагрузок, но всегда существует вероятность регрессии, и перед применением cu следует тщательно протестировать. Если из-за этого изменения поведения возникает регрессия, можно вернуться к предыдущему поведению с помощью флага трассировки запуска 898.

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