Sdílet prostřednictvím


Osvědčené postupy a pokyny pro konfiguraci výkonu pro SQL Server v Linuxu

platí pro:SQL Server – Linux

Tento článek obsahuje osvědčené postupy a doporučení k maximalizaci výkonu databázových aplikací, které se připojují k SQL Serveru v Linuxu. Tato doporučení jsou specifická pro provoz na platformě Linux. Všechna běžná doporučení SQL Serveru, jako je návrh indexu, stále platí.

Následující pokyny obsahují doporučení pro konfiguraci SQL Serveru i operačního systému Linux. Zvažte použití těchto nastavení konfigurace, abyste měli nejlepší výkon při instalaci SQL Serveru.

Doporučení konfigurace úložiště

Subsystém úložiště, který hostuje data, transakční protokoly a další přidružené soubory (například soubory kontrolních bodů pro OLTP v paměti), by měly být schopné bezúhotně spravovat průměrnou i špičku úloh.

Použití subsystému úložiště s příslušnými vstupně-výstupními operacemi za sekundu, propustností a redundancí

V místních prostředích dodavatel úložiště obvykle podporuje odpovídající hardwarovou konfiguraci RAID s prokládáním přes více disků, aby se zajistilo odpovídající IOPS, propustnost a redundantnost. Tato podpora se ale může lišit v různých dodavatelích úložiště a různých nabídkách úložiště s různými architekturami.

U SQL Serveru v Linuxu nasazených na virtuálních počítačích Azure zvažte použití softwarového raidu, abyste zajistili odpovídající požadavky na vstupně-výstupní operace za sekundu a propustnost. Při konfiguraci SQL Serveru na virtuálních počítačích Azure se stejnými úložnými požadavky se podívejte na Konfigurace úložiště pro SQL Server na virtuálních počítačích Azure.

Následující příklad ukazuje, jak vytvořit software RAID v Linuxu na virtuálním počítači Azure. Mějte na paměti, že byste měli pro požadovanou propustnost a IOPS u svazků použít odpovídající počet datových disků na základě požadavků na data, transakční protokol a I/O operace. V následujícím příkladu bylo k virtuálnímu počítači připojeno osm datových disků; čtyři pro hostování datových souborů, dva pro transakční protokoly a dva pro tempdb úlohy.

K vyhledání zařízení (například /dev/sdc) pro vytvoření RAID použijte lsblk příkaz.

# 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

Doporučení pro dělení disku a konfigurace

Pro SQL Server použijte konfiguraci RAID. Nasazená jednotka prokládání systému souborů (sunit) a šířka pruhu odpovídají geometrii RAID. Následující příklad ukazuje konfiguraci založenou na systému XFS pro svazek protokolu.

# 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

Pole protokolů je šesti-diskový RAID-10 s stripem o velikosti 64 kB. Jak vidíte:

  • Velikost sunit=16 blksbloku 16 * 4096 = 64 kB odpovídá velikosti pruhu.
  • Pro swidth=48 blks, swidth / sunit = 3, což je počet disků pro ukládání dat v poli s výjimkou paritních disků.

SQL Server podporuje systémy souborů ext4 i XFS pro hostování databáze, transakčních protokolů a dalších souborů, jako jsou soubory kontrolních bodů pro OLTP v paměti na SQL Serveru. K hostování souborů SQL Serveru a souborů transakčních protokolů použijte systém souborů XFS.

Naformátujte svazek pomocí systému souborů XFS:

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

Systém souborů XFS můžete nakonfigurovat tak, aby při vytváření a formátování svazku XFS nerozlišovali malá a velká písmena. Tato konfigurace se v ekosystému Linuxu často nepoužívá, ale dá se použít z důvodů kompatibility.

Můžete například spustit následující příkaz. Slouží -n version=ci ke konfiguraci systému souborů XFS, aby nerozlišoval malá a velká písmena.

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

Doporučení systému souborů trvalé paměti

Pro konfiguraci systému souborů na zařízeních s trvalou pamětí nastavte přidělení bloku pro příslušný systém souborů na 2 MB. Další informace najdete v tématu Technické aspekty.

Otevřít omezení souborů

Vaše produkční prostředí může vyžadovat více připojení, než je výchozí limit 1 024 otevřených souborů. Měkké a pevné limity můžete nastavit na 1 048 576. Například v RHEL upravte /etc/security/limits.d/99-mssql-server.conf soubor tak, aby měl následující hodnoty:

mssql - nofile 1048576

Poznámka:

Toto nastavení se nevztahuje na služby SQL Serveru spuštěné nástrojem systemd. Další informace naleznete v tématu Jak nastavit limity pro služby v RHEL a systemd.

Zakázání data a času posledního přístupu na filesystémech pro datové a protokolové soubory SQL Serveru

Pokud chcete zajistit automatické připojení jednotek připojených k systému po restartování, přidejte je do /etc/fstab souboru. Používejte UUID (Universally Unique Identifier) /etc/fstab k odkazování na jednotku, místo abyste použili pouze název zařízení (například /dev/sdc1).

noatime Použijte atribut s jakýmkoli systémem souborů, který ukládá data SQL Serveru a soubory protokolů. Informace o nastavení tohoto atributu najdete v dokumentaci k Linuxu. Následující příklad ukazuje, jak povolit noatime možnost pro svazek připojený k virtuálnímu počítači Azure.

Záznam přípojného bodu v /etc/fstab:

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

V předchozím příkladu UUID představuje zařízení, které můžete najít pomocí blkid příkazu.

Funkce I/O subsystému SQL Server a vynucený přístup k jednotkám (FUA)

Některé verze podporovaných distribucí Linuxu poskytují podporu funkcí subsystému FUA I/O, která poskytuje odolnost dat. SQL Server využívá funkci FUA k zajištění vysoce efektivních a spolehlivých vstupně-výstupních operací pro úlohy SQL Serveru. Další informace o podpoře FUA distribucí Linuxu a jejím účinkem na SQL Server najdete v tématu SQL Server v Linuxu: Interní informace o vynuceném přístupu k jednotce (FUA).

SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 a Ubuntu 18.04 zavedly podporu funkcí FUA v subsystému vstupně-výstupních operací. Pokud používáte SQL Server 2017 (14.x) CU 6 a novější verze, měli byste použít následující konfiguraci pro výkonnou a efektivní implementaci vstupně-výstupních operací s FUA sql Serverem.

Tuto doporučenou konfiguraci použijte, pokud jsou splněny následující podmínky.

  • SQL Server 2017 (14.x) CU 6 a novější verze

  • Distribuce a verze Linuxu, která podporuje funkci FUA (počínaje verzí Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 nebo Ubuntu 18.04)

  • Systém souborů XFS pro úložiště SQL Serveru v linuxovém jádru 4.18 nebo novějších verzích.

  • Systém souborů ext4 pro úložiště SQL Serveru v linuxovém jádru 5.6 nebo novějších verzích.

    Poznámka:

    Pokud je verze jádra Linuxu nižší než 5.6, měli byste použít systém souborů XFS pro hostování souborů dat a transakčních protokolů SQL Serveru. Počínaje jádrem verze 5.6 si můžete vybrat mezi XFS a ext4 na základě vašich konkrétních požadavků.

  • Subsystém úložiště nebo hardware, který podporuje a je nakonfigurovaný pro funkce FUA

Doporučená konfigurace:

  1. Povolte příznak trasování 3979 jako spouštěcí parametr.

  2. Ke konfiguraci a použijte mssql-conf .

Pro téměř všechny ostatní konfigurace, které nesplňují předchozí podmínky, je doporučená konfigurace následující:

  1. Povolte příznak trasování 3982 jako spouštěcí parametr (což je výchozí hodnota pro SQL Server v ekosystému Linuxu) a ujistěte se, že příznak trasování 3979 není povolený jako spouštěcí parametr.

  2. Ke konfiguraci a použijte mssql-conf .

Podpora FUA pro kontejnery SQL Serveru nasazené v Kubernetes

  1. SQL Server musí používat trvalé připojené úložiště, a nikoli overlayfs.

  2. Úložiště musí používat systémy souborů XFS nebo ext4 a měly by podporovat FUA (ext4 nepodporuje FUA v jádru Linuxu starším než verze 5.6). Před povolením tohoto nastavení byste měli spolupracovat s dodavatelem linuxové distribuce a úložiště, abyste zajistili, že operační systém a subsystém úložiště podporují možnosti FUA. V Kubernetes můžete zadat dotaz na typ systému souborů pomocí následujícího příkazu, kde <pvc-name> je vaše PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    Ve výstupu vyhledejte fstype, která je nastavená na XFS.

  3. Pracovní uzel hostující pody SQL Serveru by měl používat linuxovou distribuci a verzi, která podporuje funkci FUA (počínaje red Hat Enterprise Linuxem 8.0, SUSE Linux Enterprise Serverem 12 SP5 nebo Ubuntu 18.04).

Pokud jsou splněny výše uvedené podmínky, můžete použít následující doporučená nastavení FUA.

  1. Povolte příznak trasování 3979 jako spouštěcí parametr.

  2. Ke konfiguraci a použijte mssql-conf .

Nastavení jádra a procesoru pro vysoký výkon

Následující část popisuje doporučené nastavení operačního systému Linux související s vysokým výkonem a propustností pro instalaci SQL Serveru. Informace o konfiguraci těchto nastavení najdete v dokumentaci k distribuci Linuxu. Pomocí tuneD můžete nakonfigurovat mnoho konfigurací procesorů a jader popsaných v další části.

Konfigurace nastavení jádra pomocí TuneD

U uživatelů Red Hat Enterprise Linuxu (RHEL) profil tuneD propustnosti automaticky konfiguruje některá nastavení jádra a procesoru (s výjimkou C-States). Od verze RHEL 8.0 byl ve spolupráci s Red Hat vyvinut profil TuneD s názvem mssql, který nabízí preciznější nastavení výkonu Linuxu pro úlohy SQL Serveru. Tento profil zahrnuje profil výkonu propustnosti RHEL a uvádíme jeho definice v tomto článku pro vaši kontrolu s dalšími distribucemi Linuxu a verzemi RHEL bez tohoto profilu.

Pro SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 a Red Hat Enterprise Linux 7.x můžete balíček nainstalovat tuned ručně. Použijte ho k vytvoření a konfiguraci mssql profilu, jak je popsáno v následující části.

Navrhovaná nastavení Linuxu pomocí profilu TuneD mssql

Následující příklad poskytuje konfiguraci TuneD pro SQL Server v Linuxu.

[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

Pokud používáte linuxové distribuce s verzemi jádra většími než 4.18, okomentujte následující možnosti, jak je znázorněno. jinak zrušte komentář k následujícím možnostem, pokud používáte distribuce s verzemi jádra staršími než 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

Chcete-li povolit tento profil TuneD, uložte tyto definice do souboru ve tuned.conf/usr/lib/tuned/mssql složce a povolte profil pomocí následujících příkazů:

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

Pomocí následujícího příkazu ověřte, že je profil aktivní:

tuned-adm active

Nebo:

tuned-adm list

Doporučení k nastavení procesoru

Následující tabulka obsahuje doporučení pro nastavení procesoru:

Nastavení Hodnota Více informací
Správce frekvence procesoru výkon Zobrazení příkazu cpupower
ENERGETICKÁ_VÝKONNOSTNÍ_PŘEDPOJATOST výkon Zobrazení příkazu x86_energy_perf_policy
min_perf_pct 100 Viz dokumentace k Intel p-state
Stavy C Pouze C1 Informace o tom, jak zajistit, aby byly stavy C-States nastavené jenom na C1, najdete v dokumentaci k Linuxu nebo systému.

Když použijete TuneD, jak je popsáno, automaticky nakonfiguruje správce frekvence procesoru, ENERGY_PERF_BIAS, a min_perf_pct nastavení. Používá profil výkonu propustnosti jako základ profilu mssql . Parametr C-States musíte nakonfigurovat ručně podle dokumentace poskytované Linuxem nebo distributorem systému.

Doporučení pro nastavení disků

Následující tabulka obsahuje doporučení pro nastavení disku:

Nastavení Hodnota Více informací
Disk readahead 4096 blockdev Zobrazit příkaz
Nastavení 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
Zobrazení příkazu sysctl

Popis

  • vm.swappiness: Tento parametr řídí relativní váhu zadanou pro vyřazení paměti běžícího procesu ve vztahu k mezipaměti systému souborů. Výchozí hodnota pro tento parametr je 60, což indikuje výměnu paměťových stránek běžícího procesu oproti odstranění stránek cache souborového systému v poměru 60:140. Nastavení hodnoty 1 označuje silnou předvolbu pro zachování paměti procesu runtime ve fyzické paměti na úkor mezipaměti systému souborů. Vzhledem k tomu, že SQL Server používá fond vyrovnávací paměti jako mezipaměť datových stránek a důrazně dává přednost zápisu do fyzického hardwaru, který obchází mezipaměť systému souborů pro spolehlivé obnovení, může být užitečné agresivní nastavení swappiness pro vysoce výkonný a vyhrazený SQL Server.

    Další informace najdete v dokumentaci pro /proc/sys/vm/ - #swappiness

  • vm.dirty_*: Přístupy k zápisu souborů SQL Serveru jsou bez mezipaměti, které splňují požadavky na integritu dat. Tyto parametry umožňují efektivní výkon asynchronního zápisu a snížit vliv vstupně-výstupních operací úložiště asynchronních zápisů do mezipaměti v Linuxu tím, že umožňují dostatečně velké ukládání do mezipaměti, zatímco řídí proces vyprazdňování.

  • kernel.sched_*: Tyto hodnoty parametrů představují aktuální doporučení pro úpravu algoritmu Zcela spravedlivého plánování (CFS) v jádru Linuxu. Zlepšují propustnost síťových a úložných I/O operací, pokud jde o preempci procesů a obnovení provádění vláken.

Pomocí profilu TuneD se konfiguruje vm.swappiness, vm.dirty_* a kernel.sched_* nastavení. Nastavení disku readahead musíte nakonfigurovat ručně pomocí blockdev příkazu pro každé zařízení.

Nastavení jádra pro automatické NUMA vyrovnávání na vícero-uzlových NUMA systémech

Pokud nainstalujete SQL Server do systému NUMA s více uzlu, je ve výchozím nastavení povolené následující kernel.numa_balancing nastavení jádra. Pokud chcete systému NUMA umožnit provoz SQL Serveru s maximální efektivitou, zakažte automatické vyrovnávání NUMA v systému NUMA s více uzlů:

sysctl -w kernel.numa_balancing=0

mssql Pomocí profilu TuneD nakonfigurujete kernel.numa_balancing možnost.

Nastavení jádra pro virtuální adresní prostor

Výchozí nastavení vm.max_map_count (což je 65536) nemusí být dostatečně vysoké pro instalaci SQL Serveru. Z tohoto důvodu změňte vm.max_map_count hodnotu alespoň na 262144 pro nasazení SQL Serveru a pomocí části profilu TuneD mssql pro další ladění těchto parametrů jádra si projděte navrhovaná nastavení Linuxu. Maximální hodnota je vm.max_map_count 2147483647.

sysctl -w vm.max_map_count=1600000

mssql Pomocí profilu TuneD nakonfigurujete vm.max_map_count možnost.

Nechte Transparentní obrovské stránky (THP) povolené

Ve výchozím nastavení má většina instalací Linuxu tuto možnost zapnutou. Pro nejkonzistentnější výkon nechte tuto možnost konfigurace povolenou. Pokud je však v nasazeních SQL Serveru s více instancemi vysoká aktivita stránkování paměti nebo spouštění SQL Serveru s jinými aplikacemi náročnými na paměť na serveru, otestujte výkon aplikace po spuštění následujícího příkazu:

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

Nebo upravte mssql profil TuneD pomocí řádku:

vm.transparent_hugepages=madvise

Ujistěte se, že je mssql profil po úpravě aktivní.

tuned-adm off
tuned-adm profile mssql

mssql Pomocí profilu TuneD nakonfigurujete transparent_hugepage možnost.

Doporučení pro nastavení sítě

Společně s doporučeními k úložišti a procesoru máte také doporučení specifická pro síť. Referenční informace najdete v následujících doporučeních. V následujících příkladech nejsou všechna nastavení dostupná na různých síťových kartách. Pokyny pro každou z těchto možností najdete na dodavatelích síťových adaptérů a poraďte se s nimi. Otestujte a nakonfigurujte je pro vývojová prostředí, než je použijete v produkčních prostředích. Následující možnosti jsou vysvětleny příklady a použité příkazy jsou specifické pro typ síťové karty a dodavatele.

  1. Konfigurace velikosti vyrovnávací paměti síťového portu V tomto příkladu je síťová karta pojmenovaná eth0, což je síťová karta založená na Intelu. U síťových adaptérů založených na Intelu je doporučená velikost vyrovnávací paměti 4 kB (4096). Pomocí následujícího příkladu ověřte maximální hodnoty předvoleb a pak ho nakonfigurujte:

    Pomocí následujícího příkazu zkontrolujte maximální hodnoty přednastavení. Nahraďte eth0 názvem síťové karty:

    ethtool -g eth0
    

    Nastavte velikost vyrovnávací paměti rx (příjem) a tx (přenos) na 4 kB:

    ethtool -G eth0 rx 4096 tx 4096
    

    Zkontrolujte, jestli je hodnota správně nakonfigurovaná:

    ethtool -g eth0
    
  2. Povolte rámce jumbo. Před povolením rámců jumbo ověřte, že všechny síťové přepínače, směrovače a cokoli jiného důležitého v síťové cestě paketů mezi klienty a SQL Serverem podporují rámce jumbo. Teprve poté může povolení jumbo rámců zlepšit výkon. Po povolení rámců jumbo se připojte k SQL Serveru a změňte velikost síťového paketu na 8060 pomocí sp_configure, jak je znázorněno v následujícím příkladu:

    # 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
    
  3. Ve výchozím nastavení nastavte port pro adaptivní shodování RX/TX IRQ, což znamená, že doručování přerušení se upraví tak, aby se zlepšila latence, když je rychlost paketů nízká a zlepšila propustnost, když je rychlost paketů vysoká. Toto nastavení nemusí být dostupné ve vaší síťové infrastruktuře, proto zkontrolujte stávající síťovou infrastrukturu a ověřte, že je toto nastavení podporované. Příklad je pro síťové rozhraní s názvem eth0, což je síťové rozhraní na bázi Intel.

    1. Nastavte port pro adaptivní sloučení RX/TX IRQ.

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. Potvrďte nastavení:

      ethtool -c eth0
      

    Poznámka:

    Pokud chcete předvídatelné chování v prostředích s vysokým výkonem, jako jsou prostředí pro srovnávací testy, vypněte adaptivní slučování RX/TX IRQ a pak specificky nastavte RX/TX slučování přerušení. Podívejte se na ukázkové příkazy, které zakážou RX/TX IRQ, a pak hodnoty konkrétně nastavíte:

    Zakažte adaptivní RX/TX IRQ coalescing:

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

    Potvrďte změnu:

    ethtool -c eth0
    

    Nastavte parametry rx-usecs a irq. rx-usecs určuje, kolik mikrosekund po přijetí aspoň jednoho paketu před vygenerováním přerušení. Parametr irq určuje odpovídající zpoždění při aktualizaci stavu při zakázání přerušení. U síťových adaptérů Intel můžete použít následující nastavení:

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

    Potvrďte změnu:

    ethtool -c eth0
    
  4. Povolte škálování na straně příjmu (RSS) a ve výchozím nastavení zkombinujte RX a TX fronty RSS. Při práci s podporou Microsoftu existují konkrétní scénáře, kdy zakázání rss zlepšuje také výkon. Toto nastavení otestujte v testovacích prostředích, než ho použijete v produkčních prostředích. Následující příklad je určený pro síťové karty Intel.

    Získejte přednastavené maximální hodnoty:

    ethtool -l eth0
    

    Zkombinujte fronty s hodnotou hlášenou v přednastavené maximální hodnotě Kombinované. V tomto příkladu je hodnota nastavená na 8:

    ethtool -L eth0 combined 8
    

    Ověřte nastavení:

    ethtool -l eth0
    
  5. Práce s přidružením IRQ portu síťové karty Abyste dosáhli očekávaného výkonu úpravou spřažení IRQ, zvažte několik důležitých parametrů, jako je linuxové zpracování serverové topologie, zásobník ovladačů síťové karty, výchozí nastavení a irqbalance nastavení. Optimalizace nastavení spřažení portu IRQ síťové karty se provádějí se znalostmi topologie serveru, zakázáním irqbalancea použitím nastavení specifických pro dodavatele síťové karty.

    Následující příklad síťové infrastruktury specifické pro Mellanox pomáhá vysvětlit konfiguraci. Další informace a stažení nástrojů Mellanox mlnx naleznete v tématu Nástroje ladění výkonu pro Síťové adaptéry Mellanox. Příkazy se mění v závislosti na prostředí. Další pokyny vám poskytne dodavatel síťových adaptérů.

    Zakažte irqbalancenebo získejte snímek nastavení IRQ a vynuťte ukončení démona:

    systemctl disable irqbalance.service
    

    Nebo:

    irqbalance --oneshot
    

    Ujistěte se, že common_irq_affinity.sh je spustitelný:

    chmod +x common_irq_affinity.sh
    

    Zobrazení vazby IRQ pro port síťové karty Mellanox (například eth0):

    ./show_irq_affinity.sh eth0
    

    Optimalizace pro zajištění nejlepšího výkonu propustnosti pomocí nástroje Mellanox:

    ./mlnx_tune -p HIGH_THROUGHPUT
    

    Nastavte spřažení hardwaru na uzel NUMA, který je fyzicky hostitelem síťové karty (NIC) a jejího portu:

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

    Ověřte spřažení IRQ:

    ./show_irq_affinity.sh eth0
    

    Přidejte optimalizace slučování IRQ

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

    Ověřte nastavení:

    ethtool -c eth0
    
  6. Po provedení předchozích změn pomocí následujícího příkazu ověřte rychlost síťové karty, abyste měli jistotu, že odpovídá vašim očekáváním:

    ethtool eth0 | grep -i Speed
    

Pokročilá konfigurace jádra a operačního systému

  • Pokud chcete dosáhnout nejlepšího výkonu vstupně-výstupních operací úložiště, použijte pro bloková zařízení plánování multiqueue s Linuxem. Tato metoda plánování umožňuje dobře škálovat výkon blokové vrstvy s rychlými jednotkami SSD (Solid-State Drive) a vícejádrovými systémy. V dokumentaci zjistíte, jestli je vaše distribuce Linuxu ve výchozím nastavení povolená. Ve většině ostatních případů můžete jádro spustit pomocí scsi_mod.use_blk_mq=y pro jeho povolení. Další pokyny k tomuto nastavení můžou mít dokumentace pro vaši linuxovou distribuci. Toto nastavení je konzistentní s upstreamovým linuxovým jádrem.

  • Vzhledem k tomu, že se vstupně-výstupní operace s více cestami často používají pro nasazení SQL Serveru, nakonfigurujte multiqueue cíl mapování zařízení (DM) pro použití infrastruktury blk-mq povolením možnosti spuštění jádra dm_mod.use_blk_mq=y. Výchozí hodnota je n (zakázaná). Toto nastavení snižuje režii zamykání na úrovni DM při použití podkladových zařízení SCSI s blk-mq. Další informace o konfiguraci vstupně-výstupních operací s více cestami najdete v dokumentaci k distribuci Linuxu.

Konfigurovat stránkovací soubor

Ujistěte se, že máte správně nakonfigurovaný swapfile, abyste se vyhnuli problémům s nedostatkem paměti. Podejte se na dokumentaci k Linuxu, jak vytvořit a správně velikostně nastavit odkládací soubor.

Virtuální počítače a dynamická paměť

Pokud na virtuálním počítači používáte SQL Server v Linuxu, ujistěte se, že jste vybrali možnosti pro opravu množství paměti rezervované pro virtuální počítač. Nepoužívejte funkce, jako je Hyper-V dynamická paměť.

Konfigurace SQL Serveru

Po instalaci SQL Serveru v Linuxu proveďte následující úlohy konfigurace, abyste dosáhli nejlepšího výkonu pro vaši aplikaci.

Osvědčené postupy

Použití AFINITY PROCESU pro uzly a/nebo procesory

Použijte ALTER SERVER CONFIGURATION k nastavení PROCESS AFFINITY pro všechny NUMANODE a CPU, které používáte pro SQL Server (což je typicky pro všechny uzly a CPU) v Linuxovém operačním systému. Vazba procesoru pomáhá udržovat efektivní chování při plánování v Linuxu a SQL. Použití této NUMANODE možnosti je nejjednodušší metoda. Používejte PROCESS AFFINITY i v případě, že máte v počítači jenom jeden uzel NUMA. Další informace o nastavení PROCESS AFFINITYnaleznete v článku ALTER SERVER CONFIGURATION .

Konfigurace více tempdb datových souborů

Vzhledem k tomu, že instalace SQL Serveru v Linuxu nenabízí možnost konfigurace více tempdb souborů, doporučujeme po instalaci zvážit vytvoření více tempdb datových souborů. Další informace najdete v doprovodných materiálech v článku Doporučení k omezení kolizí přidělení v databázi tempdb SQL Serveru.

Rozšířená konfigurace

Následující doporučení jsou volitelná nastavení konfigurace, která můžete provést po instalaci SQL Serveru v Linuxu. Tyto volby vycházejí z požadavků vaší úlohy a konfigurace operačního systému Linux.

Nastavení limitu paměti pomocí mssql-conf

Aby byl pro operační systém Linux dostatek volné fyzické paměti, proces SQL Serveru ve výchozím nastavení používá pouze 80% fyzické paměti RAM. U některých systémů s velkými objemy fyzické paměti RAM může být 20% významné číslo.

Například v systému s 1 TB paměti RAM by výchozí nastavení ponechá přibližně 200 GB paměti RAM nevyužité. V takovém případě můžete chtít nakonfigurovat limit paměti na vyšší hodnotu. Tuto hodnotu můžete upravit pomocí nástroje mssql-conf . Další informace najdete v nastavení memory.memorylimitmb , které řídí paměť viditelnou pro SQL Server (v jednotkách MB).

Poznámka:

Můžete také nakonfigurovat limit paměti pomocí MSSQL_MEMORY_LIMIT_MB proměnné prostředí. Tato metoda se běžně používá při nasazování kontejnerů nebo automatizaci nasazení založených na kontejnerech nebo balíčcích SQL Serveru. Proměnná MSSQL_MEMORY_LIMIT_MB prostředí má přednost před memory.memorylimitmb nastavením.

Při změně tohoto nastavení dávejte pozor, abyste tuto hodnotu nenastavili příliš vysoko. Pokud nenecháte dostatek paměti, může docházet k problémům s operačním systémem Linux a dalšími linuxovými aplikacemi.

Konfigurace limitů paměti pomocí řídicí skupiny (cgroup) v2

Počínaje SQL Serverem 2025 (17.x) a SQL Serverem 2022 (16.x) CU 20 sql Server detekuje a respektuje omezení kontrolní skupiny (cgroup) v2, zlepšuje stabilitu výkonu a izolaci prostředků napříč prostředími Docker, Kubernetes a OpenShift. Skupiny ovládacích prvků umožňují jemně odstupňované řízení v jádru Linuxu nad systémovými prostředky, jako je procesor a paměť.

Díky podpoře cgroup v2 SQL Server snižuje chyby nedostatku paměti (OOM) dříve zjištěné v kontejnerizovaných nasazeních, zejména v clusterech Kubernetes (například AKS v1.25+), kde se nevynucovaly limity paměti definované ve specifikacích kontejnerů.

Kontrola verze cgroup

stat -fc %T /sys/fs/cgroup

Výsledky jsou následující:

Result Popis
cgroup2fs Používáte cgroup v2
cgroup Používáte cgroup v1

Přepnutí na cgroup v2

Nejjednodušší cestou je volba distribuce, která podporuje cgroup v2.

Pokud potřebujete přepnout ručně, přidejte do konfigurace GRUB následující řádek:

systemd.unified_cgroup_hierarchy=1

Potom spuštěním následujícího příkazu aktualizujte GRUB:

sudo update-grub

Další informace najdete v následujících zdrojích informací:

Pokyny pro nastavení limitů paměti

Při nastavování limitů paměti pro SQL Server v Linuxu zvažte následující pokyny:

  • Slouží cgroup k omezení celkové paměti dostupné pro kontejner. Toto nastavení vytvoří horní mez pro všechny procesy uvnitř kontejneru.

  • Limit paměti (ať už nastavený proměnnou prostředí memorylimitmb nebo proměnnou prostředí MSSQL_MEMORY_LIMIT_MB) řídí celkovou paměť, kterou může SQL Server v Linuxu přidělit napříč všemi jeho komponentami, jako je fond vyrovnávací paměti, SQLPAL, agent SQL Serveru, LibOS, PolyBase, Full-Text Search a jakýkoli jiný proces načtený v SQL Serveru na Linuxu.

  • Proměnná MSSQL_MEMORY_LIMIT_MB prostředí má přednost před memorylimitmb definovaným v mssql.conf.

  • memorylimitmb nemůže překročit skutečnou fyzickou paměť hostitelského systému.

  • Nastavte memorylimitmb nižší než paměť hostitelského systému a limit skupiny cgroup (pokud je k dispozici), abyste zajistili, že je pro operační systém Linux dostatek volné fyzické paměti. Pokud nenastavíte memorylimitmbexplicitně , SQL Server používá 80% menší hodnoty mezi celkovou systémovou pamětí a limitem skupiny cgroup (pokud je k dispozici).

  • Možnost konfigurace serveru max_server_memory omezuje pouze velikost fondu vyrovnávací paměti SQL Serveru a neřídí celkové využití paměti pro SQL Server v Linuxu. Tuto hodnotu vždy nastavte nižší, než memorylimitmb aby se zajistilo, že dostatek paměti zůstane pro jiné komponenty, jako je SQLPAL, SQL Server Agent, LibOS, PolyBase, Full-Text Search a jakýkoli jiný proces načtený do SQL Serveru v Linuxu.