Настройка энергонезависимой памяти (PMEM) для SQL Server на Linux

Применимо к:SQL Server — Linux

В этой статье описывается настройка энергонезависимой памяти (PMEM) для SQL Server 2019 (15.x) на Linux.

Обзор

SQL Server 2019 (15.x) имеет ряд выполняемых в памяти функций, которые используют PMEM. В этом документе рассматриваются шаги, необходимые для настройки энергонезависимой памяти для SQL Server на Linux.

Примечание

Термин просвещение был введен для того, чтобы описать понятие работы с файловой системой, поддерживающей энергонезависимую память. Прямой доступ к файловой системе из приложений в пользовательском пространстве упрощается с помощью сопоставления памяти (mmap()). При создании сопоставления памяти для файла приложение может выдавать инструкции по загрузке или хранению, полностью обходя стек ввода-вывода. Это "просвещенный" метод доступа к файлам с точки зрения приложения расширения узла (оно является "черным ящиком", который позволяет SQLPAL взаимодействовать с ОС Windows или Linux).

Создание пространств имен для устройств PMEM

Настройка устройств

В Linux используйте служебную программу ndctl.

  • Установите ndctl, чтобы настроить устройство PMEM. Его можно найти здесь.
  • Используйте ndctl для создания пространства имен. Пространства имен чередуются между микросхемами NVDIMM в PMEM и могут предоставлять различные типы доступа пользовательского пространства к областям памяти на устройстве. fsdax используется для SQL Server по умолчанию и в качестве предпочтительного режима.
ndctl create-namespace -f -e namespace0.0 --mode=fsdax* --map=dev

Мы выбрали режим fsdax и используем системную память для хранения метаданных страниц. Мы рекомендуем использовать --map=dev. Так метаданные хранятся непосредственно в пространстве имен. Возможность хранения метаданных в памяти с помощью --map=mem пока считается экспериментальной.

Проверьте пространство имен с помощью ndctl.

Пример выходных данных:

# ndctl list -N
{
  "dev":"namespace0.0",
  "mode":"fsdax",
  "map":"dev",
  "size":4294967296,
  "sector_size":512,
  "blockdev":"pmem0",
  "numa_node":0
}

Создание и подключение устройства PMEM

Пример с использованием XFS

mkfs.xfs -f /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax
xfs_io -c "extsize 2m" /mnt/dax

Пример с использованием EXT4

mkfs.ext4 -b 4096 -E stride=512 -F /dev/pmem0
mount -o dax,noatime /dev/pmem0 /mnt/dax

Технические вопросы

  • Выделение блоков по 2 МБ для XFS и EXT4, как описано выше
  • Неправильное согласование между выделением блоков и mmap приводит к автоматическому переходу на значение 4 КБ.
  • Размер файлов должен быть кратным 2 МБ (делиться на 2 МБ без остатка).
  • Не отключайте прозрачные огромные страницы (THP) (включены по умолчанию для большинства дистрибутивов).

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

Файлы данных SQL Server (MDFS, NDFS) и файлы tempdb можно сохранить на устройстве PMEM с помощью приведенной ниже команды, если настроен режим fsdax. Ее не следует использовать для сохранения файлов журнала SQL Server (LDFS), так как журнал транзакций должен находиться в хранилище с гарантией атомарности секторов:

ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev

При настройке параметра map в приведенной выше команде учитывайте следующие моменты.

  • Чтобы обеспечить оптимальную производительность доступа к записям страниц NVDIMM для этого устройства и их обновления, лучше использовать -map=mem .
  • Если емкость устройства NVDIMM слишком велика (больше 512 ГБ), задайте значение –map=dev, которое уменьшит пропускную способность ввода-вывода и снизит производительность.

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

ndctl create-namespace -f -e namespace0.0 --mode= sector

Так как устройства PMEM поддерживают безопасный O_DIRECT, можно включить флаг трассировки 3979, чтобы отключить механизм принудительной записи на диск. Дополнительные сведения см. в статье базы знаний KB4131496: включить механизм принудительной очистки в SQL Server 2017 для Linux. Внутренние методы принудительного доступа к модулям рассматриваются здесь: Внутренности FUA.

Дальнейшие действия

Дополнительные сведения об SQL Server на Linux см. в статье SQL Server на Linux. Рекомендации по оптимизации производительности SQL Server в Linux см. в статье Рекомендации по производительности.