Гибридный буферный пул
Применимо к: 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) с накопительным пакетом обновления 1 прямая запись является поведением по умолчанию, когда гибридный буферный пул объединяется с сохраненным буфером журналов. Это должно повысить производительность практически для всех рабочих нагрузок, но всегда существует вероятность регрессии, и перед применением cu следует тщательно протестировать. Если из-за этого изменения поведения возникает регрессия, можно вернуться к предыдущему поведению с помощью флага трассировки запуска 898.
Начиная с SQL Server 2022 (16.x) CU 1 флаг трассировки 809 будет игнорироваться SQL Server при запуске. Флаги трассировки 809 и 898 применяются только к Windows и не применяются к SQL Server на Linux. Флаги трассировки следует использовать только при указании сертифицированного специалиста по Microsoft Server.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по