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

Применимо к: даSQL Server (все поддерживаемые версии)  — Linux

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

Обзор

SQL Server 2019 (15.x) имеет ряд функций в памяти, использующих энергонезависимую память. В этом документе рассматриваются шаги, необходимые для настройки энергонезависимой памяти для 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, его создания и подключения можно поместить в него файлы базы данных или создать новую базу данных.

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

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

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