Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ě
- Nastavení jádra a procesoru pro vysoký výkon
- Konfigurace 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ů.
Doporučená konfigurace systému souborů
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:
Povolte příznak trasování 3979 jako spouštěcí parametr.
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í:
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.
Ke konfiguraci
a použijte mssql-conf .
Podpora FUA pro kontejnery SQL Serveru nasazené v Kubernetes
SQL Server musí používat trvalé připojené úložiště, a nikoli
overlayfs.Ú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šePersistentVolumeClaim:kubectl describe pv <pvc-name>Ve výstupu vyhledejte
fstype, která je nastavená na XFS.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.
Povolte příznak trasování 3979 jako spouštěcí parametr.
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 = 15000000kernel.sched_wakeup_granularity_ns = 2000000vm.dirty_ratio = 80vm.dirty_background_ratio = 3vm.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.
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
eth0názvem síťové karty:ethtool -g eth0Nastavte velikost vyrovnávací paměti
rx(příjem) atx(přenos) na 4 kB:ethtool -G eth0 rx 4096 tx 4096Zkontrolujte, jestli je hodnota správně nakonfigurovaná:
ethtool -g eth0Povolte 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 9014EXECUTE sp_configure 'network packet size', '8060'; GO RECONFIGURE WITH OVERRIDE; GOVe 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.Nastavte port pro adaptivní sloučení RX/TX IRQ.
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx onPotvrď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 offPotvrďte změnu:
ethtool -c eth0Nastavte parametry
rx-usecsairq.rx-usecsurčuje, kolik mikrosekund po přijetí aspoň jednoho paketu před vygenerováním přerušení. Parametrirqurč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 512Potvrďte změnu:
ethtool -c eth0Povolte š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 eth0Zkombinujte 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 8Ověřte nastavení:
ethtool -l eth0Prá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
irqbalancenastavení. Optimalizace nastavení spřažení portu IRQ síťové karty se provádějí se znalostmi topologie serveru, zakázánímirqbalancea 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.serviceNebo:
irqbalance --oneshotUjistěte se, že
common_irq_affinity.shje spustitelný:chmod +x common_irq_affinity.shZobrazení vazby IRQ pro port síťové karty Mellanox (například
eth0):./show_irq_affinity.sh eth0Optimalizace pro zajištění nejlepšího výkonu propustnosti pomocí nástroje Mellanox:
./mlnx_tune -p HIGH_THROUGHPUTNastavte 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` eth0Ověřte spřažení IRQ:
./show_irq_affinity.sh eth0Př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 2048Ověřte nastavení:
ethtool -c eth0Po 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=ypro 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-mqpovolením možnosti spuštění jádradm_mod.use_blk_mq=y. Výchozí hodnota jen(zakázaná). Toto nastavení snižuje režii zamykání na úrovni DM při použití podkladových zařízení SCSI sblk-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í:
- Rychlý start: Nasazení kontejneru SQL Serveru s Linuxem do Kubernetes pomocí chartů Helm
- Dokumentace k Linuxu Kernel cgroup v2
- Skupina ovládacích prvků v2
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ží
cgroupk 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í
memorylimitmbnebo 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_MBprostředí má přednost předmemorylimitmbdefinovaným vmssql.conf.memorylimitmbnemůže překročit skutečnou fyzickou paměť hostitelského systému.Nastavte
memorylimitmbnižší 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ítememorylimitmbexplicitně , 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ž
memorylimitmbaby 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.