Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
- Storage konfigurációs ajánlása
- Kernel- és CPU-beállítások a nagy teljesítmény érdekében
- SQL Server konfiguráció
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énswidth/sunit= 3, amely a tömbben lévő adatmeghajtók száma, a paritásos meghajtók kivételével.
Ajánlott fájlrendszerkonfiguráció
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ó:
Engedélyezze a 3979 nyomkövetési jelzőt indítási paraméterként.
A és
control.writethrough = 1konfigurálásához használjacontrol.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ő:
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.
A és
control.writethrough = 1konfigurálásához használjacontrol.alternatewritethrough = 1.
A Kubernetesben üzembe helyezett SQL Server-tárolók FUA-támogatása
Az SQL Servernek tartósan csatlakoztatott tárolót kell használnia, és nem
overlayfs.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>aPersistentVolumeClaim:kubectl describe pv <pvc-name>A kimenetben keresse meg a
fstype-t, amely XFS-re van beállítva.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.
Engedélyezze a 3979 nyomkövetési jelzőt indítási paraméterként.
A és
control.writethrough = 1konfigurálásához használjacontrol.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 = 15000000kernel.sched_wakeup_granularity_ns = 2000000vm.dirty_ratio = 80vm.dirty_background_ratio = 3vm.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.
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
eth0a hálózati kártya nevére:ethtool -g eth0Állítsa a
rx(fogadás) éstx(átvitel) pufferméretét 4 KB-ra:ethtool -G eth0 rx 4096 tx 4096Ellenőrizze, hogy az érték megfelelően van-e konfigurálva:
ethtool -g eth0Jumbo-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_configurea 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 9014EXECUTE sp_configure 'network packet size', '8060'; GO RECONFIGURE WITH OVERRIDE; GOAlapé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
eth0nevű hálózati kártya, amely Intel-alapú.Á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 onErő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 offErősítse meg a módosítást:
ethtool -c eth0Adja meg a
rx-usecsésirqparamétereket.rx-usecsmeghatározza, hány mikroszekundum telik el legalább egy csomag fogadása után, mielőtt a megszakítás megkezdődik. Airqparamé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 512Erősítse meg a módosítást:
ethtool -c eth0Engedé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 eth0Egyesí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 8Ellenőrizze a beállítást:
ethtool -l eth0A 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
irqbalancebeá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, airqbalancehá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.serviceVagy:
irqbalance --oneshotGyőződjön meg arról, hogy a
common_irq_affinity.shvégrehajtható:chmod +x common_irq_affinity.shIrQ-affinitás megjelenítése a Mellanox hálózati adapter portjához (például
eth0):./show_irq_affinity.sh eth0Optimalizá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` eth0Ellenőrizze az IRQ-affinitást:
./show_irq_affinity.sh eth0IRQ-ö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 2048Ellenőrizze a beállításokat:
ethtool -c eth0Az 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=ya 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-mqkernel boot opció engedélyezésével konfigurálja az eszköz-leképező (DM) több soros célhelyet azdm_mod.use_blk_mq=yinfrastruktúra használatára. Az alapértelmezett érték an(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ákblk-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:
- Rövid útmutató: SQL Server Linux-tároló üzembe helyezése a Kubernetesben Helm-diagramok használatával
- Linux Kernel cgroup v2 dokumentációja
- Vezérlőcsoport v2
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 aMSSQL_MEMORY_LIMIT_MBkö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_MBkörnyezeti változó elsőbbséget élvez amemorylimitmbmssql.conf-ban/ben definiáltakkal szemben.memorylimitmbnem haladhatja meg a gazdarendszer tényleges fizikai memóriáját.Állítsa
memorylimitmbalacsonyabbra, 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 bememorylimitmbexplicit 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
memorylimitmbannak 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.