Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server в Linux
В этой статье описывается, как настроить постоянную память (PMEM) для SQL Server 2019 (15.x) и более поздних версий на Linux.
Overview
SQL Server 2019 (15.x) добавляет поддержку постоянной памяти для ускорения нескольких операций, требующих больших затрат на хранение.
С файловой системой, ориентированной на PMEM, отображение памяти (mmap()) предоставляет пользовательским приложениям прямой доступ к файловым данным. Когда для файла создаётся карта памяти, приложение может выдавать инструкции загрузки/сохранения, обходящие слой хранения.
Note
Этот прямой доступ называется просветлённым методом доступа к файлам с точки зрения расширения хоста, именно так SQL Server взаимодействует с операционной системой хоста с помощью SQL Platform Abstraction Layer (SQLPAL).
В этой статье показано, как настроить постоянную память для SQL Server на Linux.
Создание пространств имен для устройств PMEM
Настройка устройств
В Linux используйте служебную программу ndctl.
- Установите
ndctlдля настройки устройства PMEM из раздела "Установка NDCTL". - Используйте
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 (.mdf, .ndf) и tempdb файлы на PMEM-устройстве в fsdax режиме следующей команды. Не используйте этот режим для хранения файлов журнала SQL Server (.ldf), потому что журнал транзакций требует хранилища с атомарными гарантиями секторов:
ndctl create-namespace -f -e namespace0.0 --mode=fsdax --map=dev
При настройке параметра map в приведенной выше команде учитывайте следующие моменты.
- Для лучшей производительности при доступе и обновлении этих записей страниц NVDIMM для этого устройства используйте
-map=mem - Если ёмкость NVDIMM слишком велика (больше 512 ГБ), установите
-map=dev, что влияет на пропускную способность ввода/вывода и снижает производительность
Для файлов журналов SQL Server на устройствах PMEM настройте устройства PMEM на использование таблицы трансляции секторов/блоков (BTT). Эта конфигурация обеспечивает атомарность секторов, необходимую для лог-файлов SQL Server для этой технологии хранения. Проводите проверку производительности рабочей нагрузки. Сравните производительность логов SQL Server для вашей нагрузки между этим решением и лучшими NVMe SSD, а затем выберите тот, который лучше всего соответствует вашим потребностям.
ndctl create-namespace -f -e namespace0.0 --mode= sector
Отключение принудительного очистки
Так как устройства PMEM безопасны для прямого ввода-вывода (O_DIRECT), вы можете отключить принудительную очистку данных.
Note
Система хранения может гарантировать, что любые кэшированные или поэтапные записи безопасны и долговечны, гарантируя, что записи на устройство находятся на среде, который сохраняется при сбоях системы, сбросе интерфейса и отключениях питания, а сам носитель является аппаратно избыточным.
Файлы базы данных (
.mdfи.ndf) и файлы журнала транзакций (.ldf) не используютwritethroughиalternatewritethroughпо умолчанию в SQL Server 2017 (14.x) с накопительным пакетом обновления 6 и более поздних версий, так как они используют принудительное поведение сброса. Флаг trace 3979 отключает принудительное промытие для файлов журналов баз данных и транзакций и используетwritethroughлогику andalternatewritethrough.Другие файлы, которые открывает
FILE_FLAG_WRITE_THROUGHSQL Server, такие как снимки базы данных, внутренние снимки для проверки согласованности базы данных (DBCC CHECKDB), файлы трассировки профайлера и расширенные файлы трассировки событий, используютwritethroughоптимизацииalternatewritethrough.
Дополнительные сведения об изменениях, представленных в SQL Server 2017 (14.x) CU 6, см. статью в базе знаний 4131496. Дополнительные сведения о внутренних механизмах принудительного доступа единицы (FUA) см. в разделе «Внутреннее устройство FUA».
SQL Server и возможность принудительного доступа к устройствам (FUA) в подсистеме ввода-вывода
Некоторые поддерживаемые дистрибутивы Linux реализуют принудительный доступ к единицам (FUA) на уровне подсистемы ввода-вывода, чтобы обеспечить устойчивость данных. SQL Server использует эту возможность для обеспечения эффективной и надежной производительности ввода-вывода для рабочих нагрузок Linux. Дополнительные сведения о поддержке FUA в дистрибутивах Linux и её влиянии на SQL Server см. в статье SQL Server в Linux: внутренние компоненты принудительного доступа к блокам данных (FUA).
Поддержка FUA в подсистеме ввода-вывода появилась в SUSE Linux Enterprise Server 12 с пакетом обновления 5 (SP5), Red Hat Enterprise Linux 8.0 и Ubuntu 18.04. В SQL Server 2017 (14.x) с накопительным пакетом обновления 6 и в последующих версиях используйте следующую конфигурацию, чтобы обеспечить высокую производительность и эффективность операций ввода-вывода с помощью FUA в SQL Server.
Используйте эту рекомендуемую конфигурацию, если выполнены следующие условия:
SQL Server 2017 (14.x) CU 6 и более поздние версии
Дистрибутив Linux и версия, поддерживающие возможности FUA (начиная с Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 с пакетом обновления 5 (SP5) или Ubuntu 18.04)
Note
Начиная с SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) не поддерживается.
Файловая система XFS для хранилища SQL Server в ядрах Linux 4.18 или более поздних версиях.
файловая система ext4 для хранилища SQL Server в ядрах Linux 5.6 или более поздних версиях.
Note
Используйте файловую систему XFS для размещения файлов данных SQL Server и файлов журнала транзакций, если версия ядра Linux ниже 5.6. Начиная с ядра версии 5.6, вы можете выбрать между XFS и ext4 в зависимости от ваших требований.
Подсистема хранилища и оборудование, поддерживающие и настроенные для возможностей FUA
Рекомендуемая конфигурация:
Включите флаг трассировки 3979 в качестве параметра запуска.
Используется
mssql-confдля настройкиcontrol.writethrough = 1иcontrol.alternatewritethrough = 0.
Для почти всех остальных конфигураций, которые не соответствуют предыдущим условиям, используйте следующую рекомендуемую конфигурацию:
Включите флаг трассировки 3982 в качестве параметра запуска (который используется по умолчанию для SQL Server в экосистеме Linux) и убедитесь, что флаг трассировки 3979 не включен в качестве параметра запуска.
Используется
mssql-confдля настройкиcontrol.writethrough = 1иcontrol.alternatewritethrough = 1.
Поддержка FUA для контейнеров SQL Server, развернутых в Kubernetes
SQL Server должен использовать сохраненное подключенное хранилище, а не
overlayfs.Хранилище должно использовать файловую систему XFS или ext4 и поддерживать FUA (ext4 не поддерживает FUA в ядре Linux до версии 5.6). Перед включением этого параметра обратитесь к поставщику дистрибутива и хранилища Linux, чтобы убедиться, что подсистема ОС и хранилища поддерживает параметры FUA. В Kubernetes вы можете запросить тип файловой системы, используя следующую команду, где
<pvc-name>— это вашPersistentVolumeClaim:kubectl describe pv <pvc-name>В выходных данных найдите
fstype, который настроен на XFS.Рабочий узел, на котором размещены модули pod SQL Server, должен использовать дистрибутив Linux и версию, которая поддерживает функцию FUA (начиная с Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 с пакетом обновления 5 (SP5) или Ubuntu 18.04.
Если выполнены предыдущие условия, используйте следующие рекомендуемые параметры FUA:
Включите флаг трассировки 3979 в качестве параметра запуска.
Используется
mssql-confдля настройкиcontrol.writethrough = 1иcontrol.alternatewritethrough = 0.