Рекомендации по производительности и конфигурации для SQL Server на Linux
Область применения: SQL Server — Linux
В этой статье приводятся рекомендации по повышению производительности приложений баз данных, подключающихся к SQL Server на Linux. Эти рекомендации относятся именно к платформе Linux. При этом действуют все стандартные рекомендации в отношении SQL Server, например касающиеся проектирования индекса.
Следующие рекомендации содержат рекомендации по настройке SQL Server и операционной системы Linux (ОС). Рекомендуется использовать эти параметры конфигурации, чтобы обеспечить оптимальную производительность для установки SQL Server.
- Рекомендация по настройке хранилища
- Параметры ядра и ЦП для высокой производительности
- Конфигурация SQL Server
Рекомендации по конфигурации хранилища
Подсистема хранения, в которой размещаются данные, журналы транзакций и другие связанные файлы (например, файлы контрольных точек для выполняющейся в памяти OLTP), должна легко справляться со средней и пиковой рабочей нагрузкой.
Использование подсистемы хранения с соответствующей скоростью ввода-вывода, пропускной способностью и избыточностью
Как правило, в локальных средах поставщик хранилища поддерживает соответствующую конфигурацию аппаратного RAID с чередованием данных на нескольких дисках, чтобы обеспечить соответствующие IOPS, пропускную способность и избыточность. Хотя это может варьироваться у разных поставщиков хранилищ и различных предложений систем хранения с разной архитектурой.
Для сервера 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
Рекомендация по файловой системе постоянной памяти
Для настройки файловой системы на устройствах с постоянной памятью следует установить выделение блоков размером в 2 MB. Дополнительные сведения об этой статье см. в статье "Технические рекомендации".
Ограничение на количество открытых файлов
В рабочей среде может потребоваться больше подключений, чем ограничение открытого файла по умолчанию — 1024. Вы можете установить мягкие и жесткие ограничения на значение 1 048 576. Например, в RHEL измените /etc/security/limits.d/99-mssql-server.conf
файл, чтобы иметь следующие значения:
mssql - nofile 1048576
Примечание.
Этот параметр не применяется к службам SQL Server, запущенным systemd
. Для получения дополнительной информации см. Как настроить ограничения для служб в RHEL и systemd.
Отключение временной метки последнего доступа для файлов данных и файлов журналов в файловых системах 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, профиль TuneD с именем mssql
был совместно разработан с Red Hat и предлагает более точную настройку производительности Linux для повышения производительности рабочих нагрузок SQL Server. Этот профиль включает профиль производительности пропускной способности RHEL, и мы представляем его определения в этой статье для проверки с другими дистрибутивами Linux и выпусками RHEL без этого профиля.
Для SUSE Linux Enterprise Server 12 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 | См. документацию по Linux или вашей системе, чтобы узнать, как установить C-States только на C1. |
Использование TuneD, как описано ранее, автоматически настраивает регулятор частоты ЦП и параметры min_perf_pct
соответствующим образом, поскольку профиль throughput-performance используется как основа для профиля 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 |
Описание
vm.swappiness
: этот параметр определяет относительный вес, данный для выгрузки памяти исполняемого процесса по сравнению с кэшем файловой системы. Значение этого параметра по умолчанию составляет 60, что означает обмен страницами памяти процесса среды выполнения по сравнению с удалением страниц кэша файловой системы в соотношении 60:140. Установка значения 1 указывает на сильное предпочтение сохранять память процесса выполнения в физической памяти за счет кэша файловой системы. Так как SQL Server использует буферный пул в качестве кэша страниц данных и преимущественно выполняет запись в физическую память в обход кэша файловой системы для надежного восстановления, конфигурация с агрессивной подкачкой может быть выгодна для высокопроизводительных и выделенных серверов SQL Server. Дополнительные сведения см. в документации для /proc/sys/vm/—#swappiness.vm.dirty_*
: Записи файлов SQL Server выполняются без кеширования, что удовлетворяет требованиям к целостности данных. Эти параметры позволяют обеспечивать эффективную асинхронную запись и снижать влияние операций ввода-вывода на кэширование в Linux, обеспечивая достаточно большой объем кэширования при ограничении очистки.kernel.sched_*
: Эти значения параметров представляют собой текущую рекомендацию по оптимальной настройке алгоритма полностью справедливого планирования (CFS) в ядре Linux, чтобы улучшить пропускную способность сетевых и складских вызовов ввода-вывода с учётом межпроцессного прерывания и возобновления потоков.
Использование профиля 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
Или измените профиль TuneD, добавив строку: mssql
vm.transparent_hugepages=madvise
И сделайте mssql
профиль активным после изменения:
tuned-adm off
tuned-adm profile mssql
Использование профиля TuneD mssql
конфигурирует transparent_hugepage
данный параметр.
Рекомендации по настройке сети
Как и в случае с хранилищем и ЦП, существуют рекомендации в отношении сети. Они приведены ниже для справки. Не все параметры в следующих примерах доступны в разных сетевых адаптерах. Обратитесь к поставщикам сетевых карт для консультации и получения указаний по каждому из этих вариантов. Протестируйте эти настройки в среде разработки перед их применением в рабочей среде. Ниже приведены примеры, а используемые команды относятся к типу сетевого адаптера и поставщику.
Настройка размера буфера сетевого порта. В примере ниже сетевой адаптер называется
eth0
, и он является адаптером на основе Intel. Для сетевого адаптера на основе Intel рекомендуемый размер буфера составляет 4 КБ (4096). Проверьте предустановленные максимумы и настройте его с помощью следующего примера:Проверьте предварительные максимумы с помощью следующей команды. Замените
eth0
на имя вашего NIC.ethtool -g eth0
Задайте для буфера
rx
(получения) иtx
(передачи) значение 4 КБ:ethtool -G eth0 rx 4096 tx 4096
Убедитесь, что значение настроено правильно:
ethtool -g eth0
Включите джамбо-фреймы. Прежде чем включать большие кадры, убедитесь, что все сетевые коммутаторы, маршрутизаторы и другие важные элементы в сетевом пути передачи пакетов между клиентами и SQL Server поддерживают большие кадры. Только в этом случае включение кадров большего размера может повысить производительность. После включения увеличенных кадров подключитесь к 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, воспользуйтесь примером команд, а затем установите конкретные значения.
Отключите адаптивное объединение 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
Работа с привязкой прерываний для портов сетевого интерфейса. Чтобы добиться ожидаемой производительности, настраивая привязку IRQ, рассмотрите несколько важных параметров, включая обработку серверной топологии в 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 (как правило, для всех NODE и ЦП) в ОС 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.