Рекомендации по производительности и конфигурации для SQL Server на Linux
Область применения: SQL Server — Linux
В этой статье приводятся рекомендации по повышению производительности приложений баз данных, подключающихся к SQL Server на Linux. Эти рекомендации относятся именно к платформе Linux. При этом действуют все стандартные рекомендации в отношении SQL Server, например касающиеся проектирования индекса.
Следующие рекомендации содержат рекомендации по настройке SQL Server и операционной системы Linux (ОС). Рекомендуется использовать эти параметры конфигурации, чтобы обеспечить оптимальную производительность для установки SQL Server.
- Рекомендация по настройке хранилища
- Параметры ядра и ЦП для высокой производительности
- Конфигурация SQL Server
Рекомендации по конфигурации хранилища
Подсистема хранения, в которой размещаются данные, журналы транзакций и другие связанные файлы (например, файлы контрольных точек для выполняющейся в памяти OLTP), должна легко справляться со средней и пиковой рабочей нагрузкой.
Использование подсистемы хранения с соответствующей скоростью ввода-вывода, пропускной способностью и избыточностью
Как правило, в локальных средах поставщик хранилища поддерживает соответствующую конфигурацию АППАРАТНОго RAID с чередованием по нескольким дискам, чтобы обеспечить соответствующую пропускную способность, пропускную способность и избыточность. Однако эта поддержка зависит от конкретного поставщика хранилища и конкретной архитектуры системы хранения.
Для сервера SQL Server на Linux, развернутого на Виртуальных машинах Azure, рекомендуется использовать программную реализацию RAID, чтобы обеспечить выполнение требований к скорости ввода-вывода и пропускной способности. При настройке SQL Server на виртуальных машинах Azure с аналогичными рекомендациями по хранению см. раздел "Настройка хранилища для SQL Server на виртуальных машинах Azure".
В следующем примере показано, как создать программный 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 для размещения базы данных, журналов транзакций и дополнительных файлов, таких как файлы контрольных точек для 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. Вы можете установить мягкие и жесткие ограничения 1 048 576. Например, в RHEL измените /etc/security/limits.d/99-mssql-server.conf
файл, чтобы иметь следующие значения:
mssql - nofile 1048576
Примечание.
Этот параметр не применяется к службам SQL Server, запущенным systemd
. Дополнительные сведения см. в разделе "Настройка ограничений для служб в RHEL и системе".
Отключение последнего доступа к файлам файловых систем для файловых систем и файлов журналов 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
Рекомендуемая конфигурация:
Включите флаг трассировки 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 и поддерживать FUA. Перед включением этого параметра следует работать с поставщиком дистрибутива и хранилища 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 SP5 или Ubuntu 18.04).
Если выполнены указанные выше условия, можно использовать следующие рекомендуемые параметры FUA.
Включите флаг трассировки 3979 в качестве параметра запуска.
Используйте 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.swappiness
vm.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
этот параметр.
Рекомендации по настройке сети
Как и в случае с хранилищем и ЦП, существуют рекомендации в отношении сети. Они приведены ниже для справки. Не все параметры в следующих примерах доступны в разных сетевых адаптерах. За указаниями обратитесь к поставщику конкретной сетевой карты. Протестируйте эти настройки в среде разработки перед их применением в рабочей среде. Ниже приведены примеры, а используемые команды относятся к типу сетевого адаптера и поставщику.
Настройка размера буфера сетевого порта. В приведенном ниже примере называется
eth0
сетевой адаптер, который является сетевым адаптером на основе Intel. Для сетевого адаптера на основе Intel рекомендуемый размер буфера составляет 4 КБ (4096). Проверьте предустановленные максимумы и настройте его с помощью следующего примера:Проверьте предварительные максимумы с помощью следующей команды. Замените
eth0
на имя сетевого адаптера:ethtool -g eth0
Задайте для буфера
rx
(получения) иtx
(передачи) значение 4 КБ:ethtool -G eth0 rx 4096 tx 4096
Убедитесь, что значение настроено правильно:
ethtool -g eth0
Включите кадры 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
EXECUTE sp_configure 'network packet size', '8060'; GO RECONFIGURE WITH OVERRIDE; GO
По умолчанию рекомендуется задать порт для адаптивного объединения RX/TX IRQ, что означает, что доставка прерываний корректируется, чтобы повысить задержку при низкой скорости пакетов и повысить пропускную способность при высокой скорости пакетов. Этот параметр может быть недоступен во всех разных сетевых инфраструктурах, поэтому просмотрите существующую сетевую инфраструктуру и убедитесь, что она поддерживается. Ниже приведен пример для сетевого адаптера с именем
eth0
, который является сетевой картой на основе Intel:Задайте порт для адаптивного объединения RX/TX IRQ:
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx on
Подтвердите параметр:
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
Мы также рекомендуем включить масштабирование на стороне получения (RSS) и по умолчанию объединить RX и TX-сторону очередей RSS. Существуют определенные сценарии при работе с служба поддержки Майкрософт, где отключение RSS также улучшило производительность. Протестируйте этот параметр в тестовой среде перед его применением в рабочих средах. В следующем примере используется сетевые адаптеры Intel.
Получение предустановленных максимальных значений:
ethtool -l eth0
Объедините очереди со значением, указанным в предустановке "Объединенный" максимальное значение. В этом примере для значения задано
8
значение :ethtool -L eth0 combined 8
Проверьте настройки:
ethtool -l eth0
Сходство запросов на прерывание для портов сетевой карты Чтобы добиться ожидаемой производительности путем настройки сходства запросов на прерывание, можно воспользоваться рядом важных параметров, в том числе относящихся к серверной топологии в 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
После внесения указанных выше изменений проверьте скорость работы сетевой карты с помощью следующей команды:
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.