Megosztás a következőn keresztül:


Teljesítménnyel kapcsolatos ajánlott eljárások és konfigurációs irányelvek linuxos SQL Serverhez

A következőkre vonatkozik:SQL Server Linux rendszeren

Ez a cikk ajánlott eljárásokat és javaslatokat tartalmaz a linuxos SQL Serverhez csatlakozó adatbázis-alkalmazások teljesítményének maximalizálásához. Ezek a javaslatok a Linux platformon való futtatásra vonatkoznak. Minden normál SQL Server-ajánlás, például az indexkialakítás, továbbra is érvényes.

Az alábbi irányelvek az SQL Server és a Linux operációs rendszer (OS) konfigurálására vonatkozó javaslatokat tartalmaznak. Fontolja meg ezen konfigurációs beállítások használatát az SQL Server telepítésének legjobb teljesítményéhez.

Tárkonfigurációs javaslat

Az adatokat, tranzakciónaplókat és más kapcsolódó fájlokat (például a memóriában lévő OLTP-hez készült ellenőrzőpont-fájlokat) tároló tárolóalrendszernek képesnek kell lennie az átlagos és a csúcsterhelés kezelésére is.

Tárolóalrendszer használata a megfelelő IOPS-val, átviteli sebességgel és redundanciával

A helyszíni környezetekben a tárolószolgáltató általában támogatja a megfelelő hardveres RAID-konfigurációt, amely több lemezre kiterjedő csíkozással biztosítja a megfelelő IOPS-t, átviteli sebességet és redundanciát. Ez a támogatás azonban különböző tárológyártóktól és különböző, eltérő architektúrájú tárolási ajánlatoktól eltérő lehet.

Az Azure-beli virtuális gépeken üzembe helyezett Linuxon futó SQL Server esetében fontolja meg a szoftveres RAID használatát a megfelelő IOPS- és átviteli sebességkövetelmények biztosítása érdekében. Ha hasonló tárolási szempontokat figyelembe véve konfigurálja az SQL Servert azure-beli virtuális gépeken, tekintse meg Az SQL Server tárolójának konfigurálása Azure-beli virtuális gépekencímű témakört.

Az alábbi példa bemutatja, hogyan hozhat létre szoftveres RAID-t Linuxon egy Azure-beli virtuális gépen. Ne feledje, hogy az adatok, tranzakciónaplók és tempdb I/O-követelmények alapján a kötetekhez a megfelelő számú adatlemezt kell használnia a szükséges átviteli sebességhez és az IOPS-hoz. Az alábbi példában nyolc adatlemezt csatoltak a virtuális géphez; négyet a fájlok tárolására, kettőt tranzakciónaplókhoz, kettőt pedig számítási feladatokhoz tempdb.

A RAID létrehozásához használt eszközök (például /dev/sdc) megkereséséhez használja a lsblk parancsot.

# 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

Lemezpartíciós és konfigurációs javaslatok

SQL Server esetén használjon RAID-konfigurációt. Az üzembe helyezett fájlrendszercsíkegység (sunit) és a sávszélesség megegyezik a RAID-geometriával. Az alábbi példa például egy naplókötet XFS-alapú konfigurációját mutatja be.

# 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

A naplótömb egy hat meghajtós RAID-10, 64 KB-os csíkkal. Mint látható:

  • sunit=16 blksesetén a 16 * 4096 blokkméret = 64 KB megegyezik a csík méretével.
  • swidth=48 blksesetén swidth / sunit = 3, amely a tömbben lévő adatmeghajtók száma, a paritásos meghajtók kivételével.

Az SQL Server az ext4 és az XFS fájlrendszereket is támogatja az adatbázis, a tranzakciónaplók és más fájlok, például a memóriabeli OLTP ellenőrzőpont-fájljainak üzemeltetéséhez az SQL Serveren. Használja az XFS fájlrendszert az SQL Server-adatok és a tranzakciós naplófájlok üzemeltetéséhez.

Formázza a kötetet az XFS fájlrendszerrel:

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

Az XFS-fájlrendszert úgy konfigurálhatja, hogy a kis- és nagybetűk ne legyenek érzéketlenek az XFS-kötet létrehozásakor és formázásakor. Ezt a konfigurációt nem gyakran használják a Linux-ökoszisztémában, de kompatibilitási okokból is használható.

Futtathatja például a következő parancsot. -n version=ci konfigurálásával az XFS fájlrendszert kis- és nagybetű érzéketlenné teheti.

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

Állandó memória fájlrendszerre vonatkozó javaslat

Az állandó memóriaeszközök fájlrendszer-konfigurációja esetén állítsa a mögöttes fájlrendszer blokklefoglalását 2 MB-ra. További információkért tekintse meg a műszaki szempontokat.

Fájlmegnyitási korlát

Előfordulhat, hogy éles környezetben több kapcsolatra van szükség, mint az alapértelmezett nyitott fájlküszöb, amely 1024. A puha és kemény korlátokat 1 048 576-ra állíthatja be. Például RHEL esetén, szerkessze a /etc/security/limits.d/99-mssql-server.conf fájlt a következő értékekre.

mssql - nofile 1048576

Jegyzet

Ez a beállítás nem vonatkozik a systemdáltal indított SQL Server-szolgáltatásokra. További információért lásd: Hogyan állítsunk be korlátokat a szolgáltatásokhoz az RHEL-ben és a systemd-ben.

SQL Server adat- és naplófájlokhoz tartozó fájlrendszereken az utolsó hozzáférési dátum és idő letiltása

Ha meg szeretné győződni arról, hogy a rendszerhez csatlakoztatott meghajtók automatikusan újracsatlakoznak az újraindítás után, adja hozzá őket a /etc/fstab fájlhoz. Használja az UUID -t (univerzálisan egyedi azonosító) /etc/fstab a meghajtóra való hivatkozáshoz, nem pedig az eszköz nevére (például /dev/sdc1).

Használja a noatime attribútumot az SQL Server-adatokat és naplófájlokat tároló fájlrendszerekkel. Tekintse meg a Linux-dokumentációt az attribútum beállításáról. Az alábbi példa bemutatja, hogyan engedélyezheti az noatime opciót egy Azure-beli virtuális gépen csatlakoztatott kötethez.

A /etc/fstabcsatlakoztatási pont bejegyzése:

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

Az előző példában az UUID a blkid paranccsal megtalálható eszközt jelöli.

SQL Server és kényszerített egységhozzáférés (FUA) I/O-alrendszer képessége

A támogatott Linux-disztribúciók bizonyos verziói támogatják a FUA I/O alrendszer képességeit, ami biztosítja az adatok tartósságát. Az SQL Server a FUA-képességgel rendkívül hatékony és megbízható I/O-t biztosít az SQL Server számítási feladataihoz. További információ a Linux-disztribúció FUA-támogatásáról és az SQL Serverre gyakorolt hatásáról: SQL Server On Linux: Forced Unit Access (FUA) Internals.

A SUSE Linux Enterprise Server 12 SP5, a Red Hat Enterprise Linux 8.0 és az Ubuntu 18.04 az I/O-alrendszerben támogatja a FUA-képességeket. Ha AZ SQL Server 2017 (14.x) CU 6-os és újabb verzióit használja, az alábbi konfigurációt kell használnia az SQL Server által a FUA-val történő magas teljesítményű és hatékony I/O-implementációhoz.

Az alábbi feltételek teljesülése esetén használja ezt az ajánlott konfigurációt.

  • SQL Server 2017 (14.x) CU 6 és újabb verziók

  • A FUA-képességet támogató Linux-disztribúció és verzió (a Red Hat Enterprise Linux 8.0-tól, a SUSE Linux Enterprise Server 12 SP5-től vagy az Ubuntu 18.04-től kezdve)

  • Az SQL Server Storage XFS fájlrendszere a Linux kernel 4.18-ás vagy újabb verzióiban.

  • az SQL Server Storage ext4 fájlrendszere linuxos kernel 5.6-os vagy újabb verzióiban.

    Jegyzet

    Az XFS fájlrendszert kell használnia SQL Server-adatok és tranzakciónapló-fájlok üzemeltetéséhez, ha a Linux kernel verziója kisebb, mint 5.6. A kernel 5.6-os verziójától kezdve választhat az XFS és az ext4 között a megadott követelmények alapján.

  • A FUA-képességeket támogató és konfigurált tárolási alrendszer és/vagy hardver

Ajánlott konfiguráció:

  1. Engedélyezze a 3979 nyomkövetési jelzőt indítási paraméterként.

  2. A és control.writethrough = 1konfigurálásához használja control.alternatewritethrough = 0.

Szinte minden olyan konfiguráció esetében, amely nem felel meg az előző feltételeknek, az ajánlott konfiguráció a következő:

  1. Engedélyezze a 3982 nyomkövetési jelzőt indítási paraméterként (amely a Linux-ökoszisztémában az SQL Server alapértelmezett beállítása), és győződjön meg arról, hogy a 3979-as nyomkövetési jelző nincs engedélyezve indítási paraméterként.

  2. A és control.writethrough = 1konfigurálásához használja control.alternatewritethrough = 1.

A Kubernetesben üzembe helyezett SQL Server-tárolók FUA-támogatása

  1. Az SQL Servernek tartósan csatlakoztatott tárolót kell használnia, és nem overlayfs.

  2. A tárolónak az XFS-t vagy az ext4 fájlrendszereket kell használnia, és támogatnia kell a FUA-t (az ext4 nem támogatja a FUA-t a Linux kernelen az 5.6-os verziónál korábbi verziónál). A beállítás engedélyezése előtt együtt kell működnie a Linux disztribúciós és tárolási szállítójával annak érdekében, hogy az operációs rendszer és a tárolási alrendszer támogatja a FUA-beállításokat. A Kubernetesen az alábbi paranccsal kérdezheti le a fájlrendszer típusát, ahol <pvc-name> a PersistentVolumeClaim:

    kubectl describe pv <pvc-name>
    

    A kimenetben keresse meg a fstype-t, amely XFS-re van beállítva.

  3. Az SQL Server-podokat üzemeltető feldolgozó csomópontnak olyan Linux-disztribúciót és verziót kell használnia, amely támogatja a FUA-képességet (a Red Hat Enterprise Linux 8.0-tól, a SUSE Linux Enterprise Server 12 SP5-től vagy az Ubuntu 18.04-től kezdve).

Ha a fenti feltételek teljesülnek, az alábbi ajánlott FUA-beállításokat használhatja.

  1. Engedélyezze a 3979 nyomkövetési jelzőt indítási paraméterként.

  2. A és control.writethrough = 1konfigurálásához használja control.alternatewritethrough = 0.

Kernel- és CPU-beállítások a nagy teljesítmény érdekében

Az alábbi szakasz az SQL Server telepítésének magas teljesítményével és átviteli sebességével kapcsolatos ajánlott Linux operációsrendszer-beállításokat ismerteti. A beállítások konfigurálásához tekintse meg a Linux-disztribúció dokumentációját. A TuneD az ismertetett módon használható a következő szakaszban leírt számos processzor- és kernelkonfiguráció beállításához.

Használja a TuneD rendszert a kernel beállításainak konfigurálásához

A Red Hat Enterprise Linux (RHEL) felhasználói számára a TuneD átviteli teljesítmény profil automatikusan beállít bizonyos kernel- és CPU-beállításokat (a C-állapotok kivételével). Az RHEL 8.0-tól kezdve egy mssql nevű TuneD profil közösen lett fejlesztve a Red Hattal, és finomhangolásokat kínál a Linux teljesítményéhez az SQL Server feladatokhoz. Ez a profil tartalmazza az RHEL átviteli sebesség-teljesítmény profilt, és ebben a cikkben bemutatjuk a definícióit a profil nélküli más Linux-disztribúciókkal és RHEL-kiadásokkal való áttekintéshez.

A SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 és Red Hat Enterprise Linux 7.x esetén manuálisan telepítheti a tuned csomagot. Az mssql profilt hozza létre és konfigurálja az alábbi szakaszban leírtak szerint.

Javasolt Linux-beállítások TuneD mssql profillal

Az alábbi példa egy TuneD konfigurációt biztosít a Linuxon futó SQL Serverhez.

[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

Ha 4.18-nál nagyobb kernelverziójú Linux-disztribúciókat használ, tegye megjegyzésbe az alábbi lehetőségeket az ábrán látható módon; ellenkező esetben törölje a következő beállításokat, ha 4.18-nál korábbi kernelverziókkal rendelkező disztribúciókat használ.

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

A TuneD profil engedélyezéséhez mentse ezeket a definíciókat egy tuned.conf fájlba a /usr/lib/tuned/mssql mappába, majd az alábbi parancsokkal engedélyezze a profilt:

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

Ellenőrizze, hogy a profil aktív-e a következő paranccsal:

tuned-adm active

Vagy:

tuned-adm list

CPU-beállításokra vonatkozó javaslat

Az alábbi táblázat a CPU-beállításokra vonatkozó javaslatokat tartalmaz:

Beállítás Érték További információ
Processzorfrekvencia-vezérlő teljesítmény A cpupower parancs megtekintése
ENERGY_PERF_BIAS teljesítmény A x86_energy_perf_policy parancs megtekintése
minimális teljesítmény százalék 100 Nézze meg az Intel p-state dokumentációját.
C-államok Csak C1 A linuxos vagy rendszerdokumentációban megtudhatja, hogyan biztosítható, hogy a C-államok csak C1 értékre legyenek beállítva

Ha a TuneD-et a leírtaknak megfelelően használja, az automatikusan konfigurálja a processzorfrekvencia-vezérlőt ENERGY_PERF_BIASés min_perf_pct a beállításokat. Az átviteli sebesség-teljesítmény profilt használja a mssql profil alapjaként. A C-States paramétert manuálisan kell konfigurálnia a Linux vagy a rendszer forgalmazója által biztosított dokumentációnak megfelelően.

Lemezbeállításokra vonatkozó javaslatok

Az alábbi táblázat a lemezbeállításokra vonatkozó javaslatokat tartalmaz:

Beállítás Érték További információ
Lemez readahead 4096 Lásd a blockdev parancsot
sysctl beállításai kernel.sched_min_granularity_ns = 15000000
kernel.sched_wakeup_granularity_ns = 2000000
vm.dirty_ratio = 80
vm.dirty_background_ratio = 3
vm.swappiness = 1
Lásd a sysctl parancsot

Leírás

  • vm.swappiness: Ez a paraméter szabályozza a futtatókörnyezeti folyamat memóriájának a fájlrendszer gyorsítótárához viszonyított felcseréléséhez megadott relatív súlyt. Ennek a paraméternek az alapértelmezett értéke 60, ami azt jelzi, hogy a futtatókörnyezeti folyamat memórialapjainak cseréje a fájlrendszer gyorsítótároldalainak eltávolításához képest 60:140 arányban történik. Ha az értéket 1 értékre állítja, az azt jelzi, hogy a futtatókörnyezeti folyamat memóriája a fájlrendszer gyorsítótárazásának rovására a fizikai memóriában marad. Mivel az SQL Server adatoldal-gyorsítótárként használja a pufferkészletet, és szívesebben ír át a fájlrendszer gyorsítótárát megkerülő fizikai hardveren a megbízható helyreállítás érdekében, az agresszív felcserélési konfiguráció előnyös lehet a nagy teljesítményű és dedikált SQL Server esetében.

    További információkat talál a dokumentációban a /proc/sys/vm/ oldalon: #swappiness

  • vm.dirty_*: Az SQL Server fájlírási hozzáférései gyorsítótárazás nélkül történnek, és így megfelelnek az adatintegritási követelményeknek. Ezek a paraméterek lehetővé teszik a hatékony aszinkron írási teljesítményt, és csökkentik a Linux-gyorsítótárazási írások tárolási I/O-hatását azáltal, hogy elegendő méretű gyorsítótárazást biztosítanak, miközben korlátozzák a kiürítést.

  • kernel.sched_*: Ezek a paraméterértékek a Linux-kernel teljesen tisztességes ütemezési (CFS) algoritmusának finomhangolására vonatkozó jelenlegi javaslatot képviselik. Javítják a hálózati és tárolási I/O-hívások átviteli sebességét a szálak folyamatközi előmegismétlése és újrakezdése tekintetében.

mssql A TuneD profil használatával konfigurálja a , vm.swappinessés vm.dirty_* a kernel.sched_*beállításokat. A lemezbeállítást readahead manuálisan kell konfigurálnia az blockdev parancsot használva az egyes eszközökhöz.

Kernelbeállítás automatikus NUMA-kiegyensúlyozás többcsomópontos NUMA-rendszerekhez

Ha többcsomópontos NUMA-rendszerre telepíti az SQL Servert, alapértelmezés szerint az alábbi kernel.numa_balancing kernelbeállítás engedélyezve van. Annak érdekében, hogy az SQL Server maximális hatékonysággal működjön egy NUMA-rendszeren, tiltsa le az automatikus NUMA-kiegyensúlyozást egy többcsomópontos NUMA-rendszeren:

sysctl -w kernel.numa_balancing=0

A mssql Hangolt profil használata konfigurálja a kernel.numa_balancing beállítást.

A virtuális címtér kernelbeállításai

Előfordulhat, hogy a vm.max_map_count alapértelmezett beállítása (amely 65536) nem elég magas egy SQL Server-telepítéshez. Ezért módosítsa a vm.max_map_count értéket legalább 262144-re a SQL Server-telepítés során, és tekintse meg a Javasolt Linux-beállítások TuneD mssql-profil használatával című szakaszt ezen kernelparaméterek további finomhangolása érdekében. A vm.max_map_count maximális értéke 2147483647.

sysctl -w vm.max_map_count=1600000

A mssql Hangolt profil használata konfigurálja a vm.max_map_count beállítást.

Tartsa engedélyezve a transzparens nagy oldalakat (THP)

A legtöbb Linux-telepítés alapértelmezés szerint be van kapcsolva. A legkonzisztensebb teljesítmény érdekében hagyja engedélyezve ezt a konfigurációs beállítást. Ha azonban a több példányt tartalmazó SQL Server-telepítésekben nagy memória-lapozási tevékenység van, vagy ha az SQL Server más memóriaigényű alkalmazásokkal fut a kiszolgálón, tesztelje az alkalmazás teljesítményét a következő parancs végrehajtása után:

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

Vagy módosítsa a mssql Hangolás profilt a következő sorral:

vm.transparent_hugepages=madvise

A módosítás után győződjön meg arról, hogy a mssql profil aktív:

tuned-adm off
tuned-adm profile mssql

A mssql Hangolt profil használata konfigurálja a transparent_hugepage beállítást.

Hálózati beállítási javaslatok

A tárolási és a CPU-javaslatok mellett hálózatspecifikus javaslatokat is tartalmaz. A következő javaslatok szerepelnek a felsorolásban. Az alábbi példákban nem minden beállítás érhető el a különböző hálózati adaptereken. Konzultáljon és egyeztessen a hálózati adapterek gyártóival az egyes lehetőségekre vonatkozó útmutatás érdekében. Tesztelje és konfigurálja ezt a fejlesztési környezetekben, mielőtt éles környezetben alkalmazza őket. Az alábbi lehetőségeket példákkal ismertetjük, és a használt parancsok a hálózati adapter típusára és a szállítóra vonatkoznak.

  1. Hálózati port pufferméreténekkonfigurálása. A példában a hálózati adapter neve eth0Intel-alapú hálózati adapter. Intel-alapú hálózati adapter esetén az ajánlott pufferméret 4 KB (4096). Ellenőrizze az előre beállított maximumokat, majd konfigurálja az alábbi példával:

    Ellenőrizze az előre beállított maximumokat az alábbi paranccsal. Cserélje le a eth0 a hálózati kártya nevére:

    ethtool -g eth0
    

    Állítsa a rx (fogadás) és tx (átvitel) pufferméretét 4 KB-ra:

    ethtool -G eth0 rx 4096 tx 4096
    

    Ellenőrizze, hogy az érték megfelelően van-e konfigurálva:

    ethtool -g eth0
    
  2. Jumbo-keretek engedélyezése. A jumbo-keretek engedélyezése előtt győződjön meg arról, hogy az ügyfelek és az SQL Server közötti hálózati csomag elérési útjának minden hálózati kapcsolója, útválasztója és bármi más nélkülözhetetlen eleme támogatja a jumbo-kereteket. A jumbo-keretek csak ezután javíthatják a teljesítményt. A jumbo keretek aktiválása után csatlakozzon az SQL Serverhez, és módosítsa a hálózati csomag méretét 8060-ra, sp_configure a következő példában látható módon.

    # 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. Alapértelmezés szerint állítsa be a portot az adaptív RX/TX IRQ-skálázáshoz, ami azt jelenti, hogy a megszakításkézbesítés úgy van beállítva, hogy javítsa a késést, ha a csomagsebesség alacsony, és javítja az átviteli sebességet, ha a csomagsebesség magas. Előfordulhat, hogy ez a beállítás nem érhető el a hálózati infrastruktúrában, ezért tekintse át a meglévő hálózati infrastruktúrát, és győződjön meg arról, hogy ez a beállítás támogatott. Ilyen például a eth0 nevű hálózati kártya, amely Intel-alapú.

    1. Állítsa be a portot az adaptív RX/TX IRQ-szenesítéshez:

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. Erősítse meg a beállítást:

      ethtool -c eth0
      

    Jegyzet

    A nagy teljesítményű környezetekben, például a teljesítménymérési környezetekben való kiszámítható viselkedés érdekében tiltsa le az adaptív RX/TX IRQ-egyesítést, majd állítsa be kifejezetten az RX/TX megszakítás-egyesítést. Tekintse meg a példaparancsokat az RX/TX IRQ-szenesítés letiltásához, majd az értékek konkrét beállításához:

    Az adaptív RX/TX IRQ-egyesítés letiltása:

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

    Erősítse meg a módosítást:

    ethtool -c eth0
    

    Adja meg a rx-usecs és irq paramétereket. rx-usecs meghatározza, hány mikroszekundum telik el legalább egy csomag fogadása után, mielőtt a megszakítás megkezdődik. A irq paraméter a megszakítás letiltásakor az állapot frissítésének megfelelő késleltetését adja meg. Intel-alapú hálózati adapterek esetén a következő beállításokat használhatja:

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

    Erősítse meg a módosítást:

    ethtool -c eth0
    
  4. Engedélyezze a fogadóoldali skálázást (RSS), és alapértelmezés szerint egyesítse az RSS-üzenetsorok RX és TX oldalát. A Microsoft támogatási szolgálatának használatakor bizonyos helyzetekben az RSS letiltása is javítja a teljesítményt. Tesztelje ezt a beállítást tesztkörnyezetekben, mielőtt éles környezetben alkalmazva lenne. Az alábbi példa az Intel hálózati adapterekre mutat.

    Az előre beállított maximális értékek lekérése:

    ethtool -l eth0
    

    Egyesítse az üzenetsorokat az előre beállított "Kombinált" maximális értékben jelentett értékkel. Ebben a példában az érték 8-ra van beállítva.

    ethtool -L eth0 combined 8
    

    Ellenőrizze a beállítást:

    ethtool -l eth0
    
  5. A hálózati adapter port IRQ-affinitásának használata. Az IRQ-affinitás módosításával a várt teljesítmény eléréséhez vegye figyelembe néhány fontos paramétert, például a kiszolgálótopológia Linux általi kezelését, a hálózati adapter illesztőprogram-vermét, az alapértelmezett beállításokat és irqbalance beállításokat. A hálózati adapter port IRQ-affinitási beállításainak optimalizálása a kiszolgálótopológia ismeretében, a irqbalancehálózati adapter gyártóspecifikus beállításainak letiltásával és használatával történik.

    A konfiguráció magyarázatában a Mellanox-specifikus hálózati infrastruktúra alábbi példája segít. További információkért és a Mellanox mlnx eszközök letöltéséhez tekintse meg Mellanox hálózati adapterek teljesítményhangoló eszközeit. A parancsok a környezet alapján változnak. További útmutatásért forduljon a hálózati adapter gyártójához.

    Tiltsa le irqbalance, vagy kérje le az IRQ-beállítások pillanatképét, és kényszerítse a démont a kilépésre:

    systemctl disable irqbalance.service
    

    Vagy:

    irqbalance --oneshot
    

    Győződjön meg arról, hogy a common_irq_affinity.sh végrehajtható:

    chmod +x common_irq_affinity.sh
    

    IrQ-affinitás megjelenítése a Mellanox hálózati adapter portjához (például eth0):

    ./show_irq_affinity.sh eth0
    

    Optimalizálja a legjobb átviteli teljesítményt egy Mellanox eszközzel:

    ./mlnx_tune -p HIGH_THROUGHPUT
    

    Állítson be hardver affinitást a hálózati adaptert és portját fizikailag üzemeltető NUMA-csomóponthoz:

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

    Ellenőrizze az IRQ-affinitást:

    ./show_irq_affinity.sh eth0
    

    IRQ-összevonási optimalizálások hozzáadása

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

    Ellenőrizze a beállításokat:

    ethtool -c eth0
    
  6. Az előző módosítások elvégzése után ellenőrizze a hálózati adapter sebességét, hogy az megfeleljen az elvárásainak az alábbi paranccsal:

    ethtool eth0 | grep -i Speed
    

Speciális kernel- és operációsrendszer-konfiguráció

  • A legjobb tárolási I/O-teljesítmény érdekében használja a Linux multiqueue ütemezését blokkeszközökhöz. Ez az ütemezési módszer lehetővé teszi, hogy a blokkréteg teljesítménye jól skálázható legyen gyors SSD-meghajtókkal és többmagos rendszerekkel. Ellenőrizze a dokumentációban, hogy a Linux-disztribúció alapértelmezés szerint engedélyezi-e. A legtöbb másik esetben elindíthatja a kernelt scsi_mod.use_blk_mq=y a szükséges funkciók engedélyezéséhez. A Linux-disztribúció dokumentációja további útmutatást adhat ehhez a beállításhoz. Ez a beállítás konzisztens a linuxos felsőbb rétegbeli kernellel.

  • Mivel a Multipath I/O-t gyakran használják SQL Server-üzemeltetéshez, az blk-mq kernel boot opció engedélyezésével konfigurálja az eszköz-leképező (DM) több soros célhelyet az dm_mod.use_blk_mq=y infrastruktúra használatára. Az alapértelmezett érték a n (letiltva). Ez a beállítás csökkenti a DM-réteg zárolási többletterhelését, amikor a mögöttes SCSI-eszközök használják blk-mq. A többutas I/O konfigurálásáról további információt a Linux-disztribúció dokumentációjában talál.

Swapfile konfigurálása

Győződjön meg arról, hogy megfelelően konfigurált swapfile-t használ a memóriakihasználtság elkerülése érdekében. A swapfile létrehozásához és megfelelő méretéhez tekintse meg a Linux dokumentációját.

Virtuális gépek és dinamikus memória

Ha linuxos SQL Servert futtat egy virtuális gépen, győződjön meg arról, hogy a virtuális gép számára fenntartott memória mennyiségének javításához szükséges beállításokat választja. Ne használjon olyan funkciókat, mint Hyper-V dinamikus memória.

SQL Server-konfiguráció

Hajtsa végre az alábbi konfigurációs feladatokat az SQL Server Linuxon való telepítése után, hogy a lehető legjobb teljesítményt érje el az alkalmazás számára.

Ajánlott eljárások

A PROCESS AFFINITY használata csomópontokhoz és/vagy CPU-khoz

Az ALTER SERVER CONFIGURATION segítségével állítsa be az összes PROCESS AFFINITY és CPU használatát az SQL Server számára egy Linux operációs rendszeren, ami általában minden NODE-ra és CPU-ra vonatkozik. A processzor affinitása segít fenntartani a Linux és az SQL Ütemezés hatékony viselkedését. A legegyszerűbb módszer a NUMANODE lehetőség használata. Használja PROCESS AFFINITY akkor is, ha csak egyetlen NUMA-csomópont van a számítógépen. A PROCESS AFFINITYbeállításáról további információt az ALTER SERVER CONFIGURATION című cikkben talál.

Több tempdb adatfájl konfigurálása

Mivel a Linux rendszeren futó SQL Server nem kínál lehetőséget több tempdb fájl konfigurálására, javasoljuk, hogy a telepítés után fontolja meg több tempdb adatfájl létrehozását. További információkért lásd a cikkben található útmutatást, Javaslatok az SQL Server tempdb-adatbázisfoglalási versengés csökkentésére.

Speciális konfiguráció

Az alábbi javaslatok választható konfigurációs beállítások, amelyeket az SQL Server Linuxon történő telepítése után is végrehajthat. Ezek a lehetőségek a számítási feladat követelményein és a Linux operációs rendszer konfigurációján alapulnak.

Memóriakorlát beállítása mssql-conf használatával

Annak érdekében, hogy elegendő szabad fizikai memória legyen a Linux operációs rendszer számára, az SQL Server-folyamat alapértelmezés szerint csak 80% használ a fizikai RAM-ból. Néhány rendszer esetében, amelyek nagy mennyiségű fizikai RAM-mal rendelkeznek, a 20% jelentős szám lehet.

Egy 1 TB RAM-mal rendelkező rendszerben például az alapértelmezett beállítás körülbelül 200 GB RAM-ot hagy használaton kívül. Ebben az esetben érdemes lehet a memóriakorlátot magasabb értékre konfigurálni. Ezt az értéket az mssql-conf eszközzel módosíthatja . További információért tekintse meg a memory.memorylimitmb beállítást, amely az SQL Server számára látható memóriát vezérli (MB egységekben).

Jegyzet

A környezeti változóval MSSQL_MEMORY_LIMIT_MB memóriakorlátot is konfigurálhat. Ezt a módszert gyakran használják tárolók üzembe helyezésekor, illetve SQL Server-tárolók vagy csomagalapú üzembe helyezések automatizálásakor. A MSSQL_MEMORY_LIMIT_MB környezeti változó elsőbbséget élvez a memory.memorylimitmb beállítással szemben.

A beállítás módosításakor ügyeljen arra, hogy ne állítsa túl magasra ezt az értéket. Ha nem hagy elegendő memóriát, problémákat tapasztalhat a Linux operációs rendszerrel és más Linux-alkalmazásokkal kapcsolatban.

Memóriakorlátok konfigurálása a vezérlőcsoport (cgroup) v2 használatával

Az SQL Server 2025 (17.x) és az SQL Server 2022 (16.x) CU 20-tól kezdve az SQL Server észleli és tiszteletben tartja a vezérlőcsoport (cgroup) v2 korlátozásait, javítja a teljesítménystabilitást és az erőforrások elkülönítését Docker- és Kubernetes-környezetekben és OpenShift-környezetekben. A vezérlőcsoportok lehetővé teszik a Linux-kernel részletes vezérlését olyan rendszererőforrások felett, mint a CPU és a memória.

A cgroup v2 támogatásával az SQL Server enyhíti a tárolóalapú üzemelő példányokban korábban észlelt memóriakihasználtsági (OOM-) hibákat, különösen a Kubernetes-fürtökön (például AKS v1.25+), ahol a tároló specifikációiban meghatározott memóriakorlátokat nem kényszerítették ki.

A cgroup verziójának ellenőrzése

stat -fc %T /sys/fs/cgroup

Az eredmények a következők:

Result Leírás
cgroup2fs Cgroup v2-t használ
cgroup A cgroup v1-et használja

Váltás cgroup v2-re

A legegyszerűbb út egy olyan disztribúció kiválasztása, amely a dobozon kívül támogatja a cgroup v2-t.

Ha manuálisan kell váltania, adja hozzá a következő sort a GRUB-konfigurációhoz:

systemd.unified_cgroup_hierarchy=1

Ezután futtassa a következő parancsot a GRUB frissítéséhez:

sudo update-grub

További információt a következő források tartalmaznak:

A memóriakorlátok beállításának irányelvei

A Linuxon futó SQL Server memóriakorlátainak beállításakor vegye figyelembe az alábbi irányelveket:

  • A tároló számára rendelkezésre álló teljes memória korlátozására használható cgroup . Ez a beállítás létrehozza a tárolón belüli összes folyamat felső határát.

  • A memóriakorlát (akár a beállított memorylimitmb , akár a MSSQL_MEMORY_LIMIT_MB környezeti változó) vezérli azt a teljes memóriát, amelyet a Linuxon futó SQL Server lefoglalhat az összes összetevőjén, például a pufferkészleten, az SQLPAL-on, az SQL Server-ügynökön, a LibOS-en, a PolyBase-en, a Full-Text Search-en és a Linuxon futó SQL Serverben betöltött bármely más folyamaton.

  • A MSSQL_MEMORY_LIMIT_MB környezeti változó elsőbbséget élvez a memorylimitmbmssql.conf-ban/ben definiáltakkal szemben.

  • memorylimitmb nem haladhatja meg a gazdarendszer tényleges fizikai memóriáját.

  • Állítsa memorylimitmb alacsonyabbra, mint a gazdarendszer memóriájánál és a csoport korlátjánál (ha van), hogy elegendő szabad fizikai memória legyen a Linux operációs rendszer számára. Ha nem állítja be memorylimitmbexplicit módon, az SQL Server a rendszer teljes memóriája és a csoportkorlát (ha van) között 80% kisebb értéket használ.

  • A max_server_memory kiszolgáló konfigurációs beállítása csak az SQL Server pufferkészlet méretét korlátozza, és nem szabályozza a Linuxon futó SQL Server általános memóriahasználatát. Ezt az értéket mindig állítsa alacsonyabbra, mint memorylimitmb annak biztosítása érdekében, hogy elegendő memória maradjon más összetevők, például az SQLPAL, az SQL Server Agent, a LibOS, a PolyBase, a Full-Text Search és bármely más, Linuxon futó SQL Serverbe betöltött folyamat számára.