Best practices voor prestaties en configuratierichtlijnen voor SQL Server op Linux
van toepassing op:SQL Server- - Linux
Dit artikel bevat aanbevolen procedures en aanbevelingen voor het maximaliseren van prestaties voor databasetoepassingen die verbinding maken met SQL Server op Linux. Deze aanbevelingen zijn specifiek voor uitvoering op het Linux-platform. Alle normale SQL Server-aanbevelingen, zoals het indexontwerp, zijn nog steeds van toepassing.
De volgende richtlijnen bevatten aanbevelingen voor het configureren van zowel SQL Server als het Linux-besturingssysteem (OS). Overweeg deze configuratie-instellingen te gebruiken om de beste prestaties voor een SQL Server-installatie te ervaren.
- Aanbeveling voor opslagconfiguratie
- kernel- en CPU-instellingen voor hoge prestaties
- SQL Server-configuratie
Aanbeveling voor opslagconfiguratie
Het opslagsubsysteem dat als host fungeert voor gegevens, transactielogboeken en andere gekoppelde bestanden (zoals controlepuntbestanden voor OLTP in het geheugen) moet geschikt zijn voor het beheren van zowel de gemiddelde als de piekworkload.
Opslagsubsysteem gebruiken met de juiste IOPS, doorvoer en redundantie
Normaal gesproken ondersteunt de opslagleverancier in on-premises omgevingen de juiste HARDWARE RAID-configuratie met striping over meerdere schijven om ervoor te zorgen dat de juiste IOPS, doorvoer en redundantie worden gegarandeerd. Dit kan echter verschillen tussen verschillende opslagleveranciers en verschillende opslagaanbiedingen met verschillende architecturen.
Voor SQL Server op Linux die is geïmplementeerd op virtuele Azure-machines, kunt u software-RAID gebruiken om ervoor te zorgen dat de juiste IOPS- en doorvoervereisten worden bereikt. Als u SQL Server configureert op virtuele Azure-machines met vergelijkbare opslagoverwegingen, raadpleegt u Opslag configureren voor SQL Server op virtuele Azure-machines.
In het volgende voorbeeld ziet u hoe u software-RAID maakt in Linux op virtuele Azure-machines. Houd er rekening mee dat u het juiste aantal gegevensschijven moet gebruiken voor de vereiste doorvoer en IOPS voor volumes op basis van de vereisten voor gegevens, transactielogboeken en tempdb
I/O. In het volgende voorbeeld zijn acht gegevensschijven gekoppeld aan de virtuele Azure-machine; 4 voor het hosten van gegevensbestanden, 2 voor transactielogboeken en 2 voor tempdb
workload.
Gebruik de opdracht lsblk
om de apparaten (bijvoorbeeld /dev/sdc) te vinden voor het maken van RAID.
# 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
Aanbevelingen voor schijfpartitionering en configuratie
Voor SQL Server moet u een RAID-configuratie gebruiken. De geïmplementeerde stripe-eenheid van het bestandssysteem (sunit
) en de stripebreedte moeten overeenkomen met de RAID-geometrie. Dit is bijvoorbeeld een XFS-voorbeeld voor een logboekvolume.
# 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
De logarray is een RAID-10 van 6 schijven met een 64-KB stripe. Zoals u kunt zien:
- Voor
sunit=16 blks
, 16 * 4096 blokgrootte = 64 kB, komt overeen met de streepgrootte. - Voor
swidth=48 blks
isswidth
/sunit
= 3, het aantal gegevensstations in de matrix, met uitzondering van pariteitsstations.
aanbeveling voor configuratie van bestandssysteem
SQL Server ondersteunt zowel ext4- als XFS-bestandssysteem voor het hosten van de database, transactielogboeken en aanvullende bestanden, zoals controlepuntbestanden voor IN-memory OLTP in SQL Server. Microsoft raadt aan XFS-bestandssysteem te gebruiken voor het hosten van de SQL Server-gegevens- en transactielogboekbestanden.
Maak het volume op met het XFS-bestandssysteem:
mkfs.xfs /dev/md0 -f -L datavolume
mkfs.xfs /dev/md1 -f -L logvolume
mkfs.xfs /dev/md2 -f -L tempdb
Het is mogelijk om het XFS-bestandssysteem zodanig te configureren dat het niet hoofdlettergevoelig is bij het maken en opmaken van het XFS-volume. Het is niet de veelgebruikte configuratie in het Linux-ecosysteem, maar kan worden gebruikt om compatibiliteitsredenen.
U kunt bijvoorbeeld de volgende opdracht uitvoeren.
-n version=ci
wordt gebruikt om het XFS-bestandssysteem zodanig te configureren dat het niet hoofdlettergevoelig is.
mkfs.xfs /dev/md0 -f -n version=ci -L datavolume
Aanbeveling voor permanent geheugenbestandssysteem
Voor de bestandssysteemconfiguratie op permanente geheugenapparaten moet de bloktoewijzing voor het onderliggende bestandssysteem 2 MB zijn. Raadpleeg het artikel Technische overwegingenvoor meer informatie over dit artikel.
Beperking van het openen van bestanden
Uw productieomgeving vereist mogelijk meer verbindingen dan de standaardlimiet voor geopende bestanden van 1024. U kunt zachte en harde limieten van 1.048.576 instellen. Bewerk bijvoorbeeld in RHELhet /etc/security/limits.d/99-mssql-server.conf
-bestand met de volgende waarden:
mssql - nofile 1048576
Notitie
Deze instelling is niet van toepassing op SQL Server-services die zijn gestart door systemd
. Zie voor meer informatie Limieten instellen voor services in RHEL en systemd.
Laatst geopende datum/tijd uitschakelen in bestandssysteem voor SQL Server-gegevens en logboekbestanden
Om ervoor te zorgen dat de stations die aan het systeem zijn gekoppeld automatisch opnieuw worden aangekoppeld na een herstart, voegt u deze toe aan het /etc/fstab
-bestand. U moet ook de UUID (Universally Unique Identifier) in /etc/fstab
gebruiken om naar uw station te verwijzen, in plaats van alleen de apparaatnaam (zoals /dev/sdc1
).
Gebruik het kenmerk noatime
met elk bestandssysteem waarin SQL Server-gegevens en logboekbestanden worden opgeslagen. Raadpleeg uw Linux-documentatie over het instellen van dit kenmerk. Hier volgt een voorbeeld van het inschakelen van noatime
optie voor een volume dat is gekoppeld in azure Virtual Machine.
De vermelding van het koppelpunt in /etc/fstab
:
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data1 xfs rw,attr2,noatime 0 0
In het vorige voorbeeld vertegenwoordigt UUID het apparaat dat u kunt vinden met behulp van de opdracht blkid
.
"Capaciteit van het I/O-subsysteem voor SQL Server en Geforceerde eenheidstoegang (FUA)"
Bepaalde versies van ondersteunde Linux-distributies bieden ondersteuning voor FUA I/O-subsysteemfunctionaliteit, die duurzaamheid van gegevens biedt. SQL Server maakt gebruik van de FUA-mogelijkheid om zeer efficiënte en betrouwbare I/O te bieden voor SQL Server-workloads. Zie voor meer informatie over FUA-ondersteuning door Linux-distributie en het effect ervan op SQL Server SQL Server on Linux: Forced Unit Access (FUA) Internals.
SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 en Ubuntu 18.04 hebben ondersteuning geïntroduceerd voor FUA-functionaliteit in het I/O-subsysteem. Als u SQL Server 2017 (14.x) CU 6 en latere versies gebruikt, moet u de volgende configuratie gebruiken voor krachtige en efficiënte I/O-implementatie met FUA door SQL Server.
Gebruik deze aanbevolen configuratie als aan de volgende voorwaarden wordt voldaan.
SQL Server 2017 (14.x) CU 6 en latere versies
Linux-distributie en -versie die ONDERSTEUNING biedt voor FUA-functionaliteit (te beginnen met Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 of Ubuntu 18.04)
XFS-bestandssysteem voor SQL Server-opslag
Opslagsubsysteem en/of hardware die ondersteuning biedt en is geconfigureerd voor FUA-functionaliteit
Aanbevolen configuratie:
Schakel Trace Flag 3979 in als opstartparameter.
Gebruik mssql-conf om
control.writethrough = 1
encontrol.alternatewritethrough = 0
te configureren.
Voor bijna alle andere configuraties die niet aan de vorige voorwaarden voldoen, is de aanbevolen configuratie als volgt:
Schakel Trace Flag 3982 in als opstartparameter (de standaardwaarde voor SQL Server in het Linux-ecosysteem) en zorg ervoor dat Trace Flag 3979 niet is ingeschakeld als opstartparameter.
Gebruik mssql-conf om
control.writethrough = 1
encontrol.alternatewritethrough = 1
te configureren.
FUA-ondersteuning voor SQL Server-containers die zijn geïmplementeerd in Kubernetes
De SQL Server moet permanente gekoppelde opslag gebruiken en niet
overlayfs
.De opslag moet gebruikmaken van het XFS-bestandssysteem en moet FUA ondersteunen. Voordat u deze instelling inschakelt, moet u samenwerken met uw Linux-distributie- en opslagleverancier om ervoor te zorgen dat het besturingssysteem en het opslagsubsysteem FUA-opties ondersteunt. In Kubernetes kunt u een query uitvoeren op het bestandssysteemtype met behulp van de volgende opdracht, waarbij
<pvc-name>
uwPersistentVolumeClaim
is:kubectl describe pv <pvc-name>
Zoek in de uitvoer naar
fstype
die is ingesteld op XFS.Het werkknooppunt dat als host fungeert voor de SQL Server-pods, moet een Linux-distributie en -versie gebruiken die ONDERSTEUNING biedt voor FUA-functionaliteit (te beginnen met Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 of Ubuntu 18.04).
Als aan de bovenstaande voorwaarden wordt voldaan, kunt u de volgende aanbevolen FUA-instellingen gebruiken.
Schakel Trace Flag 3979 in als opstartparameter.
Gebruik mssql-conf om
control.writethrough = 1
encontrol.alternatewritethrough = 0
te configureren.
Kernel- en CPU-instellingen voor hoge prestaties
In de volgende sectie worden de aanbevolen Linux-besturingssysteeminstellingen beschreven met betrekking tot hoge prestaties en doorvoer voor een SQL Server-installatie. Raadpleeg de documentatie van uw Linux-distributie voor het proces voor het configureren van deze instellingen. U kunt TuneD- zoals beschreven, gebruiken om veel CPU's en kernelconfiguraties te configureren, zoals beschreven in de volgende sectie.
TuneD- gebruiken om kernelinstellingen te configureren
Voor Red Hat Enterprise Linux-gebruikers (RHEL) configureert het TuneD doorvoerprestatieprofiel automatisch bepaalde kernel- en CPU-instellingen (met uitzondering van C-States). Vanaf RHEL 8.0 is een TuneD-profiel met de naam mssql
ontwikkeld met Red Hat en biedt betere afstemmingen met betrekking tot Linux-prestaties voor SQL Server-workloads. Dit profiel bevat het RHEL-doorvoerprestatieprofiel en we presenteren de definities in dit artikel voor uw beoordeling met andere Linux-distributies en RHEL-releases zonder dit profiel.
Voor SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 en Red Hat Enterprise Linux 7.x kan het tuned
-pakket handmatig worden geïnstalleerd. Het kan worden gebruikt om het mssql
profiel te maken en te configureren, zoals beschreven in de volgende sectie.
Voorgestelde Linux-instellingen met behulp van een TuneD mssql
-profiel
In het volgende voorbeeld ziet u een TuneD-configuratie voor SQL Server in Linux.
[main]
summary=Optimize for Microsoft SQL Server
include=throughput-performance
[cpu]
force_latency=5
[sysctl]
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.transparent_hugepages=always
# For multi-instance SQL deployments, use
# vm.transparent_hugepages=madvise
vm.max_map_count=1600000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.numa_balancing=0
Als u Linux-distributies gebruikt met kernelversies die groter zijn dan 4.18, moet u de volgende opties als commentaar geven, zoals wordt weergegeven; verwijder anders de opmerkingen bij de volgende opties als u distributies gebruikt met kernelversies ouder dan 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
Als u dit TuneD-profiel wilt inschakelen, slaat u deze definities op in een tuned.conf
bestand onder de map /usr/lib/tuned/mssql
en schakelt u het profiel in met behulp van de volgende opdrachten:
chmod +x /usr/lib/tuned/mssql/tuned.conf
tuned-adm profile mssql
Controleer of het profiel actief is met de volgende opdracht:
tuned-adm active
Of:
tuned-adm list
Aanbeveling voor CPU-instellingen
De volgende tabel bevat aanbevelingen voor CPU-instellingen:
Instelling | Waarde | Meer informatie |
---|---|---|
CPU-frequentie regelaar | prestatie | Zie de opdracht cpupower |
ENERGY_PERF_BIAS | prestatie | Zie het commando x86_energy_perf_policy |
min_prestatie_pct | 100 | Raadpleeg uw eigen documentatie over Intel p-state |
C-Staten | Alleen C1 | Raadpleeg uw Linux- of systeemdocumentatie over hoe u ervoor kunt zorgen dat C-States alleen is ingesteld op C1 |
Met TuneD zoals eerder beschreven configureert u automatisch cpu-frequentiebeheer, ENERGY_PERF_BIAS
en min_perf_pct
instellingen, omdat het doorvoerprestatieprofiel wordt gebruikt als basis voor het mssql
-profiel. De parameter C-States moet handmatig worden geconfigureerd volgens de documentatie van Linux of de systeemdistributeur.
Aanbevelingen voor schijfinstellingen
De volgende tabel bevat aanbevelingen voor schijfinstellingen:
Instelling | Waarde | Meer informatie |
---|---|---|
Schijf readahead |
4096 | Zie de opdracht blockdev |
sysctl-instellingen | kernel.sched_min_granularity_ns = 15000000 kernel.sched_wakeup_granularity_ns = 2000000 vm.dirty_ratio = 80 vm.dirty_background_ratio = 3 vm.swappiness = 1 |
Zie de opdracht sysctl |
Beschrijving
vm.swappiness
: deze parameter bepaalt het relatieve gewicht dat wordt gegeven aan het wisselen van runtimeprocesgeheugen in vergelijking met de bestandssysteemcache. De standaardwaarde voor deze parameter is 60, wat aangeeft dat de geheugenpagina's van het runtimeproces worden gewisseld in vergelijking met het verwijderen van cachepagina's van het bestandssysteem met een verhouding van 60:140. Het instellen van de waarde 1 geeft een sterke voorkeur aan voor het behouden van runtimeprocesgeheugen in fysiek geheugen ten koste van de bestandssysteemcache. Omdat SQL Server gebruikmaakt van buffergroep als een gegevenspaginacache en er de voorkeur aan geeft om door te schrijven naar fysieke hardware die de bestandssysteemcache omzeilt voor betrouwbaar herstel, kan agressieve swappiness-configuratie nuttig zijn voor hoog presterende en toegewezen SQL Server. Meer informatie vindt u in documentatie voor /proc/sys/vm/ - #swappinessvm.dirty_*
: schrijftoegangen voor SQL Server-bestanden zijn niet in de cache opgeslagen en voldoen aan de vereisten voor gegevensintegriteit. Deze parameters bieden efficiënte asynchrone schrijfprestaties en verlagen het I/O-opslageffect van Schrijfbewerkingen in Linux-caching door voldoende caching toe te staan terwijl het leegmaken wordt beperkt.kernel.sched_*
: deze parameterwaarden vertegenwoordigen de huidige aanbeveling voor het aanpassen van het CFS-algoritme (Completely Fair Scheduling) in de Linux-kernel, om de doorvoer van I/O-aanroepen voor netwerk en opslag te verbeteren met betrekking tot interprocesvoorbereiding en hervatting van threads.
Met het mssql
TuneD-profiel configureert u de instellingen voor vm.swappiness
, vm.dirty_*
en kernel.sched_*
. De configuratie van de schijf readahead
met behulp van blockdev
opdracht is per apparaat en moet handmatig worden uitgevoerd.
Kernelinstelling voor automatische NUMA-balancering voor NUMA-systemen met meerdere knooppunten
Als u SQL Server op een NUMA-systeem met meerdere knooppunten installeert, is de volgende kernel.numa_balancing
kernelinstelling standaard ingeschakeld. Als u wilt dat SQL Server maximaal efficiënt werkt op een NUMA-systeem, schakelt u automatische NUMA-verdeling uit op een NUMA-systeem met meerdere knooppunten:
sysctl -w kernel.numa_balancing=0
Met het mssql
TuneD-profiel configureert u de optie kernel.numa_balancing
.
Kernelinstellingen voor virtuele adresruimte
De standaardinstelling van vm.max_map_count
(65536) is mogelijk niet hoog genoeg voor een SQL Server-installatie. Wijzig daarom de vm.max_map_count
-waarde in ten minste 262144 voor een SQL Server-implementatie en raadpleeg de Voorgestelde Linux-instellingen met behulp van een-sectie van het TuneD mssql-profiel voor verdere afstemming van deze kernelparameters. De maximumwaarde voor vm.max_map_count
is 2147483647.
sysctl -w vm.max_map_count=1600000
Met het mssql
TuneD-profiel configureert u de optie vm.max_map_count
.
Transparent Huge Pages (THP) ingeschakeld laten
Voor de meeste Linux-installaties moet deze optie standaard zijn ingeschakeld. We raden u aan voor de meest consistente prestatie-ervaring om deze configuratieoptie ingeschakeld te laten. Als er echter sprake is van een hoge geheugen wisselactiviteit in SQL Server-implementaties met meerdere exemplaren, of sql Server-uitvoering met andere geheugeneisende toepassingen op de server, raden we u aan om de prestaties van uw toepassingen te testen na het uitvoeren van de volgende opdracht:
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Of wijzig het mssql
TuneD-profiel met de regel:
vm.transparent_hugepages=madvise
En maak het mssql
profiel actief na de wijziging:
tuned-adm off
tuned-adm profile mssql
Met het mssql
TuneD-profiel configureert u de optie transparent_hugepage
.
Aanbevelingen voor netwerkinstellingen
Net als er aanbevelingen voor opslag en CPU zijn, zijn er netwerkspecifieke aanbevelingen die hieronder ter referentie worden vermeld. Niet alle instellingen in de volgende voorbeelden zijn beschikbaar op verschillende NIC's. Verwijs naar en raadpleeg NIC-leveranciers voor richtlijnen voor elk van deze opties. Test en configureer dit in ontwikkelomgevingen voordat u ze toepast op productieomgevingen. De volgende opties worden uitgelegd met voorbeelden en de gebruikte opdrachten zijn specifiek voor het type NIC en de leverancier.
De grootte van de netwerkpoortbuffer configureren. In het onderstaande voorbeeld heeft de NIC de naam
eth0
, een op Intel gebaseerde NIC. Voor Intel gebaseerde NIC is de aanbevolen buffergrootte 4 kB (4096). Controleer de vooraf ingestelde maximumlimieten en configureer deze vervolgens met behulp van het volgende voorbeeld:Controleer de vooraf ingestelde maximumlimieten met de volgende opdracht. Vervang
eth0
door de NIC-naam:ethtool -g eth0
Stel zowel de buffergrootte
rx
(ontvangen) alstx
(verzenden) in op 4 kB:ethtool -G eth0 rx 4096 tx 4096
Controleer of de waarde juist is geconfigureerd:
ethtool -g eth0
Jumboframesinschakelen. Voordat u jumboframes inschakelt, controleert u of alle netwerkswitches, routers en alle andere essentiële items in het netwerkpakketpad tussen de clients en de SQL Server jumboframes ondersteunen. Alleen dan kan het inschakelen van jumboframes de prestaties verbeteren. Nadat jumboframes zijn ingeschakeld, maakt u verbinding met SQL Server en wijzigt u de grootte van het netwerkpakket in 8060 met behulp van
sp_configure
zoals hieronder wordt weergegeven:# 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
Standaard bevelen we aan de poort te configureren voor adaptieve RX/TX IRQ-coalescing, wat betekent dat de interruptafhandeling wordt aangepast zodat de latentie wordt verbeterd bij een lage pakketsnelheid en de doorvoersnelheid wordt verhoogd bij een hoge pakketsnelheid. Deze instelling is mogelijk niet beschikbaar in alle verschillende netwerkinfrastructuur, dus controleer de bestaande netwerkinfrastructuur en controleer of dit wordt ondersteund. Het onderstaande voorbeeld is voor de NIC met de naam
eth0
, een op Intel gebaseerde NIC:Stel de poort in voor Adaptive RX/TX IRQ Coalescing:
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx on
Bevestig de instelling:
ethtool -c eth0
Notitie
Voor voorspelbaar gedrag in omgevingen met hoge prestaties, zoals benchmarking-omgevingen, schakelt u de adaptieve RX/TX IRQ-coalescing uit en stelt u vervolgens specifiek de RX/TX-interrupts in. Zie de voorbeeldopdrachten om de RX/TX IRQ-coalescentie uit te schakelen en stel vervolgens de waarden specifiek in.
De adaptieve RX/TX IRQ-coalescentie uitschakelen:
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx off
Bevestig de wijziging:
ethtool -c eth0
Stel de parameters
rx-usecs
enirq
in.rx-usecs
specificeert het aantal microseconden dat verstreken moet zijn na ontvangst van ten minste één pakket voordat een interrupt wordt gegenereerd. De parameterirq
geeft de bijbehorende vertragingen op bij het bijwerken van de status wanneer de interrupt is uitgeschakeld. Voor Intel bases NIC's kunt u de volgende instellingen gebruiken:ethtool -C eth0 rx-usecs 100 tx-frames-irq 512
Bevestig de wijziging:
ethtool -c eth0
We raden u ook aan om RSS (receive-side scaling) in te schakelen en standaard de RX- en TX-zijde van RSS-wachtrijen te combineren. Er zijn specifieke scenario's geweest bij het werken met Microsoft Ondersteuning, waarbij het uitschakelen van RSS ook de prestaties heeft verbeterd. Test deze instelling in testomgevingen voordat u deze toepast op productieomgevingen. Het volgende voorbeeld is voor Intel NIC's.
Haal de vooraf ingestelde maximumwaarden op:
ethtool -l eth0
Combineer de wachtrijen met de waarde die is gerapporteerd in de vooraf ingestelde maximumwaarde 'Gecombineerd'. In dit voorbeeld is de waarde ingesteld op
8
:ethtool -L eth0 combined 8
Controleer de instelling:
ethtool -l eth0
Werken met de affiniteit van IRQ's op NIC-poorten. Als u verwachte prestaties wilt bereiken door de IRQ-affiniteit aan te passen, moet u rekening houden met enkele belangrijke parameters, zoals de verwerking van de servertopologie, de stack van NIC-stuurprogramma's, de standaardinstellingen en de irqbalance-instelling. Optimalisaties van de NIC-poort-IRQ-affiniteitsinstellingen worden uitgevoerd met kennis van servertopologie, het uitschakelen van de irqbalance en het gebruik van de NIC-leverancierspecifieke instellingen.
In het volgende voorbeeld van de specifieke netwerkinfrastructuur van Mellanox wordt de configuratie uitgelegd. Zie Hulpprogramma's voor het afstemmen van prestaties voor Mellanox-netwerkadaptersvoor meer informatie en om de Mellanox mlnx tools te downloaden. De opdrachten worden gewijzigd op basis van de omgeving. Neem contact op met de NIC-leverancier voor verdere richtlijnen.
Schakel
irqbalance
uit of haal een momentopname van de IRQ-instellingen op en dwing de daemon af te sluiten:systemctl disable irqbalance.service
Of:
irqbalance --oneshot
Zorg ervoor dat
common_irq_affinity.sh
uitvoerbaar is:chmod +x common_irq_affinity.sh
IRQ-affiniteit weergeven voor mellanox-NIC-poort (bijvoorbeeld
eth0
):./show_irq_affinity.sh eth0
Optimaliseren voor de beste doorvoerprestaties met een Mellanox-hulpprogramma:
./mlnx_tune -p HIGH_THROUGHPUT
Stel hardwareaffiniteit in op het NUMA-knooppunt dat fysiek als host fungeert voor de NIC en de bijbehorende poort:
./set_irq_affinity_bynode.sh `\cat /sys/class/net/eth0/device/numa_node` eth0
Controleer de IRQ-affiniteit:
./show_irq_affinity.sh eth0
Voeg optimalisaties voor IRQ-bundeling toe
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx off ethtool -C eth0 rx-usecs 750 tx-frames-irq 2048
Controleer de instellingen:
ethtool -c eth0
Nadat de bovenstaande wijzigingen zijn voltooid, controleert u de snelheid van de NIC om ervoor te zorgen dat deze overeenkomt met de verwachting met behulp van de volgende opdracht:
ethtool eth0 | grep -i Speed
Geavanceerde kernel- en besturingssysteemconfiguratie
Voor de beste opslag I/O-prestaties gebruikt u Linux-multiqueueplanning voor blokapparaten, waardoor de prestaties van de bloklaag goed kunnen worden geschaald met snelle SSD's (Solid-State Drives) en multi-core systemen. Raadpleeg de documentatie als deze standaard is ingeschakeld in uw Linux-distributie. In de meeste andere gevallen kan het opstarten van de kernel met
scsi_mod.use_blk_mq=y
dit mogelijk maken, hoewel documentatie van de In gebruikde Linux-distributie mogelijk verdere richtlijnen bevat. Dit is consistent met de upstream Linux-kernel.Omdat I/O met meerdere paden vaak wordt gebruikt voor SQL Server-implementaties, configureert u het dm-doel (device mapper) met meerdere wachtrijen om de
blk-mq
-infrastructuur te gebruiken door dedm_mod.use_blk_mq=y
kernel-opstartoptie in te schakelen. De standaardwaarde isn
(uitgeschakeld). Deze instelling, wanneer de onderliggende SCSI-apparaten gebruikmaken vanblk-mq
, vermindert de vergrendelingsoverhead op de DM-laag. Raadpleeg de documentatie van uw Linux-distributie voor meer informatie over het configureren van multipath I/O.
Swapfile configureren
Zorg ervoor dat u een correct geconfigureerde swapfile hebt om geheugenproblemen te voorkomen. Raadpleeg uw Linux-documentatie voor het maken en de juiste grootte van een wisselbestand.
Virtuele machines en dynamisch geheugen
Als u SQL Server op Linux uitvoert op een virtuele machine, moet u opties selecteren om de hoeveelheid geheugen te herstellen die is gereserveerd voor de virtuele machine. Gebruik geen functies zoals Hyper-V dynamisch geheugen.
SQL Server-configuratie
Voer de volgende configuratietaken uit nadat u SQL Server op Linux hebt geïnstalleerd om de beste prestaties voor uw toepassing te bereiken.
Best practices
PROCESAFFINITEIT gebruiken voor knooppunten en/of CPU's
Gebruik ALTER SERVER CONFIGURATION
om PROCESS AFFINITY
in te stellen voor alle NUMANODE
en/of CPU's die u gebruikt voor SQL Server (meestal voor alle NODEs en CPU's) in een Linux-besturingssysteem. Processoraffiniteit helpt het efficiënte gedrag van Linux- en SQL-planning te behouden. Het gebruik van de NUMANODE
optie is de eenvoudigste methode. Gebruik PROCESS AFFINITY
zelfs als u slechts één NUMA-knooppunt op uw computer hebt. Zie het artikel ALTER SERVER CONFIGURATION voor meer informatie over het instellen van PROCESS AFFINITY
.
Meerdere tempdb
gegevensbestanden configureren
Omdat een INSTALLATIE van SQL Server op Linux geen optie biedt voor het configureren van meerdere tempdb
bestanden, raden we u aan meerdere tempdb
gegevensbestanden te maken na de installatie. Zie de richtlijnen in het artikel Aanbevelingen voor het verminderen van toewijzingsconflicten in de tempdb-database van SQL Servervoor meer informatie.
Geavanceerde configuratie
De volgende aanbevelingen zijn optionele configuratie-instellingen die u kunt uitvoeren na de installatie van SQL Server in Linux. Deze opties zijn gebaseerd op de vereisten van uw workload en configuratie van uw Linux-besturingssysteem.
Een geheugenlimiet instellen met mssql-conf
Om ervoor te zorgen dat er voldoende fysiek geheugen beschikbaar is voor het Linux-besturingssysteem, gebruikt het SQL Server-proces standaard slechts 80% van het fysieke RAM-geheugen. Voor sommige systemen met een grote hoeveelheid fysiek RAM-geheugen is 20% mogelijk een aanzienlijk aantal. Op een systeem met 1 TB RAM-geheugen zou de standaardinstelling bijvoorbeeld ongeveer 200 GB ram-geheugen ongebruikt laten. In deze situatie wilt u de geheugenlimiet mogelijk configureren op een hogere waarde. Zie de documentatie over het hulpprogramma mssql-conf en de instelling memory.memorylimitmb waarmee het geheugen wordt beheerd dat zichtbaar is voor SQL Server (in eenheden van MB).
Wanneer u deze instelling wijzigt, moet u deze waarde niet te hoog instellen. Als u onvoldoende geheugen overlaat, kunt u problemen ondervinden met het Linux-besturingssysteem en andere Linux-toepassingen.