Delen via


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

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 blksis swidth / 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:

  1. Schakel Trace Flag 3979 in als opstartparameter.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 0te configureren.

Voor bijna alle andere configuraties die niet aan de vorige voorwaarden voldoen, is de aanbevolen configuratie als volgt:

  1. 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.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 1te configureren.

FUA-ondersteuning voor SQL Server-containers die zijn geïmplementeerd in Kubernetes

  1. De SQL Server moet permanente gekoppelde opslag gebruiken en niet overlayfs.

  2. 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> uw PersistentVolumeClaimis:

    kubectl describe pv <pvc-name>
    

    Zoek in de uitvoer naar fstype die is ingesteld op XFS.

  3. 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.

  1. Schakel Trace Flag 3979 in als opstartparameter.

  2. Gebruik mssql-conf om control.writethrough = 1 en control.alternatewritethrough = 0te 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_BIASen 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/ - #swappiness

  • vm.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.

  1. 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) als tx (verzenden) in op 4 kB:

    ethtool -G eth0 rx 4096 tx 4096
    

    Controleer of de waarde juist is geconfigureerd:

    ethtool -g eth0
    
  2. 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
    
  3. 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:

    1. Stel de poort in voor Adaptive RX/TX IRQ Coalescing:

      ethtool -C eth0 adaptive-rx on
      ethtool -C eth0 adaptive-tx on
      
    2. 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 en irq in. rx-usecs specificeert het aantal microseconden dat verstreken moet zijn na ontvangst van ten minste één pakket voordat een interrupt wordt gegenereerd. De parameter irq 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
    
  4. 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
    
  5. 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 irqbalanceuit 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
    
  6. 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 de dm_mod.use_blk_mq=y kernel-opstartoptie in te schakelen. De standaardwaarde is n (uitgeschakeld). Deze instelling, wanneer de onderliggende SCSI-apparaten gebruikmaken van blk-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 NUMANODEen/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.