Гибридный буферный пул
Область применения: 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 и автоматически выполняют необходимое сопоставление памяти файлов базы данных при запуске базы данных или при подключении, восстановлении или создании базы данных.
Дополнительные сведения см. в разделе:
- Настройте постоянную память (PMEM) для SQL Server в Windows (SQL Server 2022 (16.x) и более поздних версиях.
- Настройте постоянную память (PMEM) для SQL Server на Linux.
Включение гибридного буферного пула
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.