Рекомендации по производительности и конфигурации для SQL Server на Linux

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

В этой статье приводятся рекомендации по повышению производительности приложений баз данных, подключающихся к SQL Server на Linux. Эти рекомендации относятся именно к платформе Linux. При этом действуют все стандартные рекомендации в отношении SQL Server, например касающиеся проектирования индекса.

Следующие рекомендации содержат рекомендации по настройке SQL Server и операционной системы Linux (ОС). Рекомендуется использовать эти параметры конфигурации, чтобы обеспечить оптимальную производительность для установки SQL Server.

Рекомендации по конфигурации хранилища

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

Использование подсистемы хранения с соответствующей скоростью ввода-вывода, пропускной способностью и избыточностью

Как правило, в локальных средах поставщик хранилища поддерживает соответствующую конфигурацию АППАРАТНОго RAID с чередованием по нескольким дискам, чтобы обеспечить соответствующую пропускную способность, пропускную способность и избыточность. Однако эта поддержка зависит от конкретного поставщика хранилища и конкретной архитектуры системы хранения.

Для сервера SQL Server на Linux, развернутого на Виртуальных машинах Azure, рекомендуется использовать программную реализацию RAID, чтобы обеспечить выполнение требований к скорости ввода-вывода и пропускной способности. При настройке SQL Server на виртуальных машинах Azure с аналогичными рекомендациями по хранению см. служба хранилища конфигурацию для виртуальных машин SQL Server.

В следующем примере показано, как создать программный RAID-интерфейс в Linux в Azure Виртуальные машины. Помните, что необходимо использовать соответствующее количество дисков данных для требуемой пропускной способности и операций ввода-вывода для томов на основе данных, журнала транзакций и tempdb операций ввода-вывода. В следующем примере восемь дисков данных были подключены к виртуальной машине Azure; 4 для размещения файлов данных, 2 для журналов транзакций и 2 для tempdb рабочей нагрузки.

Чтобы найти устройства (например, /dev/sdc) для создания RAID, используйте lsblk команду.

# For Data volume, using 4 devices, in RAID 5 configuration with 8KB stripes
mdadm --create --verbose /dev/md0 --level=raid5 --chunk=8K --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf

# For Log volume, using 2 devices in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md1 --level=raid10 --chunk=64K --raid-devices=2 /dev/sdg /dev/sdh

# For tempdb volume, using 2 devices in RAID 0 configuration with 64KB stripes
mdadm --create --verbose /dev/md2 --level=raid0 --chunk=64K --raid-devices=2 /dev/sdi /dev/sdj

Рекомендации по разбиению дисков на разделы и их настройке

Для SQL Server следует использовать конфигурацию RAID. Развернутая единица полосы файловой системы (sunit) и ширина полосы должна соответствовать геометрии RAID. Например, это пример на основе XFS для тома журнала.

# Creating a log volume, using 6 devices, in RAID 10 configuration with 64KB stripes
mdadm --create --verbose /dev/md3 --level=raid10 --chunk=64K --raid-devices=6 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

mkfs.xfs /dev/md3 -f -L log
meta-data=/dev/md3               isize=512    agcount=32, agsize=18287648 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=585204384, imaxpct=5
         =                       sunit=16     swidth=48 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=285744, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Массив журналов — это 6-дисковый RAID-10 с 64-КБ полосой. Вы можете видеть следующее.

  • Для sunit=16 blks, 16 * 4096 размер блока = 64 КБ, соответствует размеру полосы.
  • Для swidth=48 blks, swidth / sunit = 3, что является числом дисков данных в массиве, за исключением дисков четности.

Рекомендация по настройке файловой системы

SQL Server поддерживает как файловые системы ext4, так и XFS для размещения базы данных, журналов транзакций и дополнительных файлов, таких как файлы проверка point для OLTP в памяти в SQL Server. Корпорация Майкрософт рекомендует использовать файловую систему XFS для размещения файлов данных SQL Server и файлов журнала транзакций.

Форматирование тома с помощью файловой системы XFS:

mkfs.xfs /dev/md0 -f -L datavolume
mkfs.xfs /dev/md1 -f -L logvolume
mkfs.xfs /dev/md2 -f -L tempdb

При создании и форматировании тома XFS можно настроить файловую систему XFS без учета регистра. Это не часто используемая конфигурация в экосистеме Linux, но ее можно использовать по соображениям совместимости.

Например, можно выполнить следующую команду. -n version=ci используется для настройки файловой системы XFS, которая не учитывает регистр.

mkfs.xfs /dev/md0 -f -n version=ci -L datavolume

Рекомендация по файловой системе сохраняемой памяти

Для базовой файловой системы на устройствах PMEM следует настроить выделение блоков по 2 МБ. Дополнительные сведения об этой статье см. в статье "Технические рекомендации".

Ограничение "Открыть файл"

В рабочей среде может потребоваться больше подключений, чем ограничение открытого файла по умолчанию 1024. Мы рекомендуем установить мягкий предел 16000 и жесткий предел 32727. Например, в RHEL измените /etc/security/limits.d/99-mssql-server.conf файл, чтобы иметь следующие значения:

mssql hard nofile 32727
mssql soft nofile 16000

Отключение последнего доступа к файлам файловых систем для файловых систем и файлов журналов SQL Server

Чтобы убедиться, что диски, подключенные к системе, автоматически подключаются после перезагрузки, добавьте их в /etc/fstab файл. Вы также должны использовать UUID (универсальный уникальный идентификатор) для /etc/fstab ссылки на диск, а не только имя устройства (например /dev/sdc1, ).

Используйте атрибут с любой noatime файловой системой, в которой хранятся файлы данных и журналов SQL Server. Сведения о задании этого атрибута см. в документации по Linux. Ниже приведен пример включения noatime параметра для тома, подключенного на виртуальной машине Azure.

Запись точки подключения в /etc/fstab:

UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data1 xfs rw,attr2,noatime 0 0

В предыдущем примере UUID представляет устройство, которое можно найти с помощью blkid команды.

SQL Server и возможность принудительного доступа к модулям (FUA) в подсистеме ввода-вывода

Некоторые версии поддерживаемых дистрибутивов Linux обеспечивают поддержку возможностей подсистемы ввода-вывода FUA, которая обеспечивает устойчивость данных. SQL Server использует функцию FUA для обеспечения высокой эффективности и надежного ввода-вывода для рабочих нагрузок SQL Server. Дополнительные сведения о поддержке FUA дистрибутивом Linux и его влиянии на SQL Server см. в статье SQL Server On Linux: внутренние внутренние компоненты принудительного доступа к единицам (FUA).

SUSE Linux Enterprise Server 12 с пакетом обновления 5 (SP5), Red Hat Enterprise Linux 8.0 и Ubuntu 18.04 представили поддержку возможностей FUA в подсистеме ввода-вывода. Если вы используете SQL Server 2017 (14.x) с накопительным пакетом обновления 6 и более поздних версий, следует использовать следующую конфигурацию для высокой производительности и эффективной реализации операций ввода-вывода с помощью FUA by 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)

  • Файловая система XFS для хранилища SQL Server

  • подсистема служба хранилища и (или) оборудование, которое поддерживает и настраивается для возможностей FUA

Рекомендуемая конфигурация:

  1. Включите флаг трассировки 3979 в качестве параметра запуска.

  2. Используйте mssql-conf для настройки control.writethrough = 1 и control.alternatewritethrough = 0.

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

  1. Включите флаг трассировки 3982 в качестве параметра запуска (который используется по умолчанию для SQL Server в экосистеме Linux) и убедитесь, что флаг трассировки 3979 не включен в качестве параметра запуска.

  2. Используйте mssql-conf для настройки control.writethrough = 1 и control.alternatewritethrough = 1.

Поддержка FUA для контейнеров SQL Server, развернутых в Kubernetes

  1. SQL Server должен использовать сохраненное подключенное хранилище, а не overlayfs.

  2. Хранилище должно использовать файловую систему XFS и поддерживать FUA. Перед включением этого параметра следует работать с поставщиком дистрибутива и хранилища Linux, чтобы убедиться, что подсистема ОС и хранилища поддерживает параметры FUA. В Kubernetes можно запросить тип файловой системы с помощью следующей команды:<pvc-name>PersistentVolumeClaim

    kubectl describe pv <pvc-name>
    

    В выходных данных найдите fstype значение XFS.

  3. Рабочий узел, на котором размещены модули pod SQL Server, должен использовать дистрибутив Linux и версию, которая поддерживает возможности FUA (начиная с Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 или Ubuntu 18.04).

Если выполнены указанные выше условия, можно использовать следующие рекомендуемые параметры FUA.

  1. Включите флаг трассировки 3979 в качестве параметра запуска.

  2. Используйте mssql-conf для настройки control.writethrough = 1 и control.alternatewritethrough = 0.

Параметры ядра и ЦП для высокой производительности

В этом разделе приводятся рекомендованные параметры ОС Linux для обеспечения высокой производительности и пропускной способности системы SQL Server. Сведения о настройке этих параметров см. в документации по дистрибутиву Linux. Вы можете использовать TuneD , как описано, для настройки множества ЦП и конфигураций ядра, описанных в следующем разделе.

Настройка параметров ядра с помощью TuneD

Для пользователей Red Hat Enterprise Linux (RHEL) профиль пропускной способности TuneD настраивает некоторые параметры ядра и ЦП автоматически (за исключением C-States). Начиная с RHEL 8.0, имя mssql профиля TuneD было закодировано с помощью Red Hat и предлагает более подробные настройки производительности Linux для рабочих нагрузок SQL Server. Этот профиль включает профиль производительности пропускной способности RHEL, и мы представляем его определения в этой статье для проверки с другими дистрибутивами Linux и выпусками RHEL без этого профиля.

Для SUSE Linux Enterprise Server 12 с пакетом обновления 5 (SP5), Ubuntu 18.04 и Red Hat Enterprise Linux 7.x tuned пакет можно установить вручную. Его можно использовать для создания и настройки mssql профиля, как описано в следующем разделе.

Предлагаемые параметры Linux с помощью профиля TuneD mssql

В следующем примере представлена конфигурация TuneD для SQL Server на Linux.

[main]
summary=Optimize for Microsoft SQL Server
include=throughput-performance

[cpu]
force_latency=5

[sysctl]
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.transparent_hugepages=always
# For multi-instance SQL deployments, use
# vm.transparent_hugepages=madvise
vm.max_map_count=1600000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.numa_balancing=0

Если вы используете дистрибутивы Linux с версиями ядра больше 4.18, закомментируйте следующие параметры, как показано ниже; в противном случае раскомментируйте следующие параметры, если вы используете дистрибутивы с версиями ядра до версии 4.18.

# kernel.sched_latency_ns = 60000000
# kernel.sched_migration_cost_ns = 500000
# kernel.sched_min_granularity_ns = 15000000
# kernel.sched_wakeup_granularity_ns = 2000000

Чтобы включить этот профиль TuneD, сохраните эти определения в файле в tuned.conf папке /usr/lib/tuned/mssql и включите профиль с помощью следующих команд:

chmod +x /usr/lib/tuned/mssql/tuned.conf
tuned-adm profile mssql

Убедитесь, что профиль активен, выполнив следующую команду:

tuned-adm active

Или сделайте так:

tuned-adm list

Рекомендации в отношении параметров ЦП

В приведенной ниже таблице представлены рекомендации по параметрам ЦП.

Параметр Значение Дополнительные сведения
Регулятор частоты ЦП производительность См. описание команды cpupower
ENERGY_PERF_BIAS производительность См. описание команды x86_energy_perf_policy
min_perf_pct 100 Ознакомьтесь с документацией по intel p-state
C-States Только C1 Сведения о том, как включить только режим C1 C-States, см. в документации по Linux или вашей системе

Использование TuneD, как описано ранее, автоматически настраивает регулятор ENERGY_PERF_BIASчастоты ЦП и min_perf_pct параметры соответствующим образом из-за профиля производительности пропускной способности, используемого mssql в качестве основы для профиля. Параметр C-States необходимо настроить вручную в соответствии с документацией, предоставляемой сообществом Linux или распространителем системы.

Рекомендации в отношении параметров дисков

В приведенной ниже таблице представлены рекомендации по параметрам дисков.

Параметр Значение Дополнительные сведения
Диск readahead 4096 См. blockdev команду
Параметры sysctl kernel.sched_min_granularity_ns = 15000000
kernel.sched_wakeup_granularity_ns = 2000000
vm.dirty_ratio = 80
vm.dirty_background_ratio = 3
vm.swappiness = 1
См. описание команды sysctl

Description

  • vm.swappiness: этот параметр определяет относительный вес, заданный для переключения памяти процесса выполнения по сравнению с кэшем файловой системы. Значение этого параметра по умолчанию — 60, то есть страницы выгружаются из памяти процесса среды выполнения и удаляются из кэша файловой системы в соотношении 60:140. Значение 1 указывает на то, что в физической памяти предпочтительнее сохранять процесс среды выполнения, а не кэш файловой системы. Так как SQL Server использует буферный пул в качестве кэша страниц данных и преимущественно выполняет запись в физическую память в обход кэша файловой системы для надежного восстановления, конфигурация с агрессивной подкачкой может быть выгодна для высокопроизводительных и выделенных серверов SQL Server. Дополнительные сведения см. в документации по параметру /proc/sys/vm/ — #swappiness.

  • vm.dirty_*: доступ на запись файлов SQL Server не качнулся, удовлетворяющий требованиям к целостности данных. Эти параметры позволяют эффективно выполнять асинхронную запись и снизить эффект операций ввода-вывода хранилища для кэширования Linux, позволяя достаточно большого объема кэширования при регулировании очистки.

  • kernel.sched_*: эти значения параметров представляют текущую рекомендацию по настройке алгоритма полного планирования (CFS) в ядре Linux, чтобы повысить пропускную способность вызовов ввода-вывода сети и хранилища в отношении межпроцессного прерывания и возобновления потоков.

mssql Использование профиля TuneD настраивает vm.swappinessvm.dirty_* параметры и kernel.sched_* параметры. Настройка readahead для диска с помощью команды blockdev производится на уровне устройства и должна выполняться вручную.

Настройка автоматической балансировки NUMA ядра для систем NUMA с несколькими узлами

Если установить SQL Server в системе NUMA с несколькими узлами, по умолчанию включен следующий kernel.numa_balancing параметр ядра. Чтобы разрешить SQL Server работать с максимальной эффективностью в системе NUMA, отключите автоматическую балансировку NUMA в системе NUMA с несколькими узлами:

sysctl -w kernel.numa_balancing=0

mssql Использование профиля TuneD настраивает kernel.numa_balancing этот параметр.

Параметры ядра для виртуального адресного пространства

Параметр vm.max_map_count по умолчанию (65536) может быть недостаточно высоким для установки SQL Server. По этой причине измените vm.max_map_count значение по крайней мере на 262144 для развертывания SQL Server и ознакомьтесь с предлагаемыми параметрами Linux с помощью раздела профиля TuneD mssql для дальнейшей настройки этих параметров ядра. Максимальное значение для vm.max_map_count 2147483647.

sysctl -w vm.max_map_count=1600000

mssql Использование профиля TuneD настраивает vm.max_map_count этот параметр.

Сохранение параметра Transparent Huge Pages (THP) во включенном состоянии

В большинстве систем Linux этот параметр конфигурации включен по умолчанию. Чтобы обеспечить максимально единообразную производительность, мы рекомендуем не отключать его. Однако в случае высокой активности страничной памяти в развертываниях SQL Server с несколькими экземплярами или при выполнении SQL Server с другими ресурсоемкими приложениями на сервере рекомендуется проверить производительность приложений после выполнения следующей команды:

echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

Или измените mssql профиль TuneD со строкой:

vm.transparent_hugepages=madvise

И сделайте mssql профиль активным после изменения:

tuned-adm off
tuned-adm profile mssql

mssql Использование профиля TuneD настраивает transparent_hugepage этот параметр.

Рекомендации по настройке сети

Как и в случае с хранилищем и ЦП, существуют рекомендации в отношении сети. Они приведены ниже для справки. Не все параметры в следующих примерах доступны в разных сетевых адаптерах. За указаниями обратитесь к поставщику конкретной сетевой карты. Протестируйте эти настройки в среде разработки перед их применением в рабочей среде. Ниже приведены примеры, а используемые команды относятся к типу сетевого адаптера и поставщику.

  1. Настройка размера буфера сетевого порта. В приведенном ниже примере называется eth0сетевой адаптер, который является сетевым адаптером на основе Intel. Для сетевого адаптера на основе Intel рекомендуемый размер буфера составляет 4 КБ (4096). Проверьте предустановленные максимумы и настройте его с помощью следующего примера:

    Проверьте предварительные максимумы с помощью следующей команды. Замените eth0 на имя сетевого адаптера:

    ethtool -g eth0
    

    Задайте для буфера rx (получения) и tx (передачи) значение 4 КБ:

    ethtool -G eth0 rx 4096 tx 4096
    

    Убедитесь, что значение настроено правильно:

    ethtool -g eth0
    
  2. Включите кадры jumbo. Прежде чем включать кадры jumbo, убедитесь, что все сетевые коммутаторы, маршрутизаторы и что-либо другое важное в пути сетевого пакета между клиентами и SQL Server поддерживают кадры jumbo. Только в этом случае включение jumbo-кадров может повысить производительность. После включения jumbo-кадров подключитесь к SQL Server и измените размер сетевого пакета на 8060 с помощью sp_configure, как показано ниже.

    # command to set jumbo frame to 9014 for a Intel NIC named eth0 is
    ifconfig eth0 mtu 9014
    # verify the setting using the command:
    ip addr | grep 9014
    
    EXEC sp_configure 'network packet size', '8060';
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
  3. По умолчанию рекомендуется задать порт для адаптивного объединения RX/TX IRQ, что означает, что доставка прерываний корректируется, чтобы повысить задержку при низкой скорости пакетов и повысить пропускную способность при высокой скорости пакетов. Этот параметр может быть недоступен во всех разных сетевых инфраструктурах, поэтому просмотрите существующую сетевую инфраструктуру и убедитесь, что она поддерживается. Ниже приведен пример для сетевого адаптера с именем eth0, который является сетевой картой на основе Intel:

    1. Задайте порт для адаптивного объединения RX/TX IRQ:

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. Подтвердите параметр:

      ethtool -c eth0
      

    Примечание.

    Для предсказуемого поведения в высокопроизводительных средах, таких как среды для тестирования производительности, отключите адаптивное объединение запросов на прерывание RX/TX, а затем задайте его вручную. Для заданий значений воспользуйтесь примерами команд для отключения объединения запросов на прерывание RX/TX.

    Отключите адаптивное объединение RX/TX IRQ:

    ethtool -C eth0 adaptive-rx off
    ethtool -C eth0 adaptive-tx off
    

    Подтвердите изменение:

    ethtool -c eth0
    

    rx-usecs Задайте параметры и irq параметры. rx-usecs указывает, сколько микросекунд после получения не менее 1 пакета перед созданием прерывания. Параметр irq указывает соответствующие задержки при обновлении состояния при отключении прерывания. Для сетевых адаптеров баз Intel можно использовать следующие параметры:

    ethtool -C eth0 rx-usecs 100 tx-frames-irq 512
    

    Подтвердите изменение:

    ethtool -c eth0
    
  4. Мы также рекомендуем включить масштабирование на стороне получения (RSS) и по умолчанию объединить RX и TX-сторону очередей RSS. Существуют определенные сценарии при работе с служба поддержки Майкрософт, где отключение RSS также улучшило производительность. Протестируйте этот параметр в тестовой среде перед его применением в рабочих средах. В следующем примере используется сетевые адаптеры Intel.

    Получение предустановленных максимальных значений:

    ethtool -l eth0
    

    Объедините очереди со значением, указанным в предустановке "Объединенный" максимальное значение. В этом примере для значения задано 8значение :

    ethtool -L eth0 combined 8
    

    Проверьте настройки:

    ethtool -l eth0
    
  5. Сходство запросов на прерывание для портов сетевой карты Чтобы добиться ожидаемой производительности путем настройки сходства запросов на прерывание, можно воспользоваться рядом важных параметров, в том числе относящихся к серверной топологии в Linux и стеку драйверов сетевой карты, а также параметрами по умолчанию и параметром irqbalance. Оптимизация параметров сходства запросов на прерывание для портов сетевой карты выполняется с учетом топологии сервера, предусматривает отключение параметра irqbalance и использование параметров конкретного поставщика сетевой карты.

    Следующий пример конкретной сетевой инфраструктуры Mellanox помогает объяснить конфигурацию. Дополнительные сведения о том, как скачать средства Mellanox для сетевых адаптеров Mellanox, см. в разделе "Средства настройки производительности". Команды изменяются в зависимости от среды. Обратитесь к поставщику сетевого адаптера, чтобы получить дополнительные рекомендации.

    Отключите irqbalanceили получите моментальный снимок параметров IRQ и принудительно завершите работу управляющей программы:

    systemctl disable irqbalance.service
    

    Или сделайте так:

    irqbalance --oneshot
    

    Убедитесь, что common_irq_affinity.sh это исполняемый файл:

    chmod +x common_irq_affinity.sh
    

    Отображение сопоставления IRQ для порта сетевого адаптера Mellanox (например, eth0):

    ./show_irq_affinity.sh eth0
    

    Оптимизируйте оптимальную производительность пропускной способности с помощью средства Mellanox:

    ./mlnx_tune -p HIGH_THROUGHPUT
    

    Задайте сходство оборудования с узлом NUMA, на котором физически размещен сетевой адаптер и его порт:

    ./set_irq_affinity_bynode.sh `\cat /sys/class/net/eth0/device/numa_node` eth0
    

    Проверьте сходство IRQ:

    ./show_irq_affinity.sh eth0
    

    Добавление оптимизаций объединения IRQ

    ethtool -C eth0 adaptive-rx off
    ethtool -C eth0 adaptive-tx off
    ethtool -C eth0  rx-usecs 750 tx-frames-irq 2048
    

    Проверьте параметры:

    ethtool -c eth0
    
  6. После внесения указанных выше изменений проверьте скорость работы сетевой карты с помощью следующей команды:

    ethtool eth0 | grep -i Speed
    

Расширенная конфигурация ядра и ОС

  • Для оптимальной производительности операций ввода-вывода хранилища используйте многозапускное планирование Linux для блочных устройств, что позволяет производительности блочного слоя масштабироваться с быстрыми твердотельными дисками (SSD) и многоядерными системами. Проверьте документацию, если она включена по умолчанию в дистрибутиве Linux. В большинстве других случаев загрузка ядра с scsi_mod.use_blk_mq=y поддержкой включает его, хотя документация по дистрибутиву Linux может иметь дополнительные рекомендации по нему. Это соответствует вышестоящий ядру Linux.

  • Так как для развертываний SQL Server часто используются многопаточные операции ввода-вывода, настройте целевой объект многострочной схемы устройств (DM) для использования blk-mq инфраструктуры, включив dm_mod.use_blk_mq=y параметр загрузки ядра. Значение по умолчанию — n (отключено). Когда базовые устройства SCSI используют blk-mq, этот параметр сокращает затраты на блокировку на уровне DM. Дополнительные сведения о настройке многопатокового ввода-вывода см. в документации по дистрибутиву Linux.

Настройка файла подкачки

Во избежание проблем с нехваткой памяти правильно настройте файл подкачки. Сведения о создании файла подкачки и его правильном размере см. в документации по вашей системе Linux.

Виртуальные машины и динамическая память

Если SQL Server на Linux выполняется в виртуальной машине, настройте фиксированный размер памяти, резервируемой для виртуальной машины. Не используйте такие функции, как динамическая память Hyper-V.

Конфигурация SQL Server

Выполните следующие задачи конфигурации после установки SQL Server на Linux, чтобы обеспечить оптимальную производительность приложения.

Рекомендации

Использование PROCESS AFFINITY для узлов и ЦП

Используйте ALTER SERVER CONFIGURATION для установки PROCESS AFFINITY всех NUMANODEЦП, которые вы используете для SQL Server (обычно для всех noDEs и ЦП) в ОС Linux. Соответствие процессоров помогает эффективно планировать работу Linux и SQL. NUMANODE Использование параметра является самым простым методом. Используйте PROCESS AFFINITY даже если на компьютере есть только один узел NUMA. Дополнительные сведения о настройке PROCESS AFFINITYсм. в статье ALTER SERVER CONFIGURATION .

Настройка нескольких tempdb файлов данных

Так как установка SQL Server на Linux не предоставляет возможность настройки нескольких tempdb файлов, рекомендуется создать несколько tempdb файлов данных после установки. Дополнительные сведения см. в статье Рекомендации по сокращению состязания за выделяемые ресурсы в базе данных tempdb SQL Server.

Расширенная конфигурация

Следующие рекомендации являются необязательными параметрами конфигурации, которые можно выполнить после установки SQL Server на Linux. Их выбор зависит от требований рабочей нагрузки и конфигурации ОС Linux.

Настройка предельного объема памяти с помощью mssql-conf

Чтобы обеспечить достаточный объем свободной физической памяти для ОС Linux, процесс SQL Server по умолчанию использует только 80 % физического ОЗУ. В некоторых системах с большим размером ОЗУ 20 % может быть очень много. Например, в системе с 1 ТБ ОЗУ при настройке по умолчанию неиспользуемыми остаются приблизительно 200 ГБ ОЗУ. В таком случае может быть желательно установить более высокий предел памяти. См. документацию по средству mssql-conf и параметру memory.memorylimitmb, который определяет объем памяти, доступный SQL Server (в МБ).

При изменении этого параметра будьте осторожны. Не задавайте слишком большое значение. Если памяти будет недостаточно, могут возникнуть проблемы в работе ОС Linux и других приложений Linux.