Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Linux
In diesem Artikel werden Empfehlungen zur Betriebssystem- und Hardwarekonfiguration behandelt, um die Leistung für SQL Server für Linux zu maximieren, einschließlich Speicher, Kernel, CPU und Netzwerkeinstellungen.
Note
Informationen zu Speicherkonfigurations- und Containerspeicherbeschränkungen finden Sie unter Bewährte Methoden zur Leistung: SQL Server Arbeitsspeicher unter Linux.
- Empfehlungen für die Speicherkonfiguration
- Kerneleinstellungen und CPU-Einstellungen für hohe Leistung
- SQL Server-Konfiguration
Empfehlungen für die Speicherkonfiguration
Das Speichersubsystem, das Daten, Transaktionsprotokolle und andere zugeordnete Dateien (z. B. Prüfpunktdateien für in-Memory-OLTP) hostt, sollte sowohl durchschnittliche als auch Spitzenarbeitslasten ordnungsgemäß verwalten.
Verwenden des Speichersubsystems mit angemessenen Werten für IOPS, Durchsatz und Redundanz
In lokalen Umgebungen unterstützt der Speicheranbieter normalerweise geeignete Hardware-RAID-Konfiguration mit Striping über mehrere Datenträger hinweg, um geeignete IOPS, Durchsatz und Redundanz sicherzustellen. Diese Unterstützung kann sich jedoch in verschiedenen Speicheranbietern und verschiedenen Speicherangeboten mit unterschiedlichen Architekturen unterscheiden.
Für SQL Server für Linux, die auf Azure Virtual Machines bereitgestellt werden, sollten Sie software-RAID verwenden, um geeignete IOPS und Durchsatz sicherzustellen. Überlegungen zum Speichern beim Konfigurieren von SQL Server auf Azure virtuellen Computern finden Sie unter Konfigurieren des Speichers für SQL Server auf Azure virtuellen Computern.
Das folgende Beispiel zeigt, wie Sie Software-RAID in Linux auf einem virtuellen Azure-Computer erstellen. Verwenden Sie die entsprechende Anzahl von Datenträgern für den erforderlichen Durchsatz und IOPS für Volumes basierend auf den Daten-, Transaktionsprotokoll- und tempdb E/A-Anforderungen. Im folgenden Beispiel werden acht Datenträger an die VM angefügt: vier zum Hosten von Datendateien, zwei für Transaktionsprotokolle und zwei für tempdb workload.
Um die Geräte (z. B /dev/sdc. ) für die RAID-Erstellung zu finden, verwenden Sie den lsblk Befehl.
# 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
Empfehlungen zur Partitionierung und Konfiguration von Datenträgern
Verwenden Sie für SQL Server eine RAID-Konfiguration. Die bereitgestellte Dateisystem-Stripeeinheit (sunit) und die Streifenbreite stimmen mit der RAID-Geometrie überein. Das folgende Beispiel zeigt beispielsweise eine XFS-basierte Konfiguration für ein Protokollvolume.
# 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
Das Log-Array ist ein RAID-10 mit sechs Festplatten und einem 64-KB-Stripe. Wie Sie sehen:
- Für
sunit=16 blksentspricht die Stripegröße 16 × 4.096 (Blockgröße) = 64 KB. - Für
swidth=48 blksentspricht die Anzahl der Datenträger im Array (ohne Paritätsdatenträger)swidth/sunit= 3.
Empfohlene Dateisystemkonfiguration
SQL Server unterstützt sowohl ext4- als auch XFS-Dateisysteme zum Hosten der Datenbank, Transaktionsprotokolle und anderer Dateien wie Prüfpunktdateien für IN-Memory-OLTP in SQL Server. Verwenden Sie das XFS-Dateisystem zum Hosten von SQL Server Daten- und Transaktionsprotokolldateien.
Formatieren Sie das Volume mithilfe des XFS-Dateisystems:
mkfs.xfs /dev/md0 -f -L datavolume
mkfs.xfs /dev/md1 -f -L logvolume
mkfs.xfs /dev/md2 -f -L tempdb
Sie können das XFS-Dateisystem so konfigurieren, dass die Groß-/Kleinschreibung nicht beachtet wird, wenn Sie das XFS-Volume erstellen und formatieren. Diese Konfiguration wird nicht häufig im Linux-Ökosystem verwendet, sie kann jedoch aus Kompatibilitätsgründen verwendet werden.
Führen Sie beispielsweise den folgenden Befehl aus. Wird -n version=ci verwendet, um das XFS-Dateisystem so zu konfigurieren, dass die Groß-/Kleinschreibung nicht beachtet wird.
mkfs.xfs /dev/md0 -f -n version=ci -L datavolume
Empfehlungen für das PMEM-Dateisystem
Legen Sie für die Dateisystemkonfiguration auf Geräten für beständigen Arbeitsspeicher die Blockzuordnung für das zugrunde liegende Dateisystem auf 2 MB fest. Weitere Informationen finden Sie in technischen Überlegungen.
Beschränkung für offene Dateien
Ihre Produktionsumgebung erfordert möglicherweise mehr Verbindungen als das standardlimit für 1024 geöffnete Dateien (1.024). Sie können weiche und harte Grenzwerte auf 1048576 (1.048.576) festlegen. Bearbeiten Sie beispielsweise in RHEL die /etc/security/limits.d/99-mssql-server.conf Datei so, dass sie die folgenden Werte enthält:
mssql - nofile 1048576
Note
Diese Einstellung gilt nicht für SQL Server-Dienste, die von systemd gestartet werden. Weitere Informationen finden Sie unter How to set limits for services in RHEL and systemd.
Datum und Uhrzeit des letzten Zugriffs in Dateisystemen für SQL Server-Daten und Protokolldateien deaktivieren
Um sicherzustellen, dass das System die Laufwerke nach einem Neustart automatisch erneut einordnet, fügen Sie sie der /etc/fstab Datei hinzu. Verwenden Sie die UUID (Universally Unique Identifier) in /etc/fstab, um auf das Laufwerk zu verweisen, anstatt nur auf den Gerätenamen (wie /dev/sdc1).
Verwenden Sie das Attribut noatime mit einem beliebigen Dateisystem, auf dem SQL Server-Daten und -Protokolldateien gespeichert werden. Informationen zum Festlegen dieses Attributs finden Sie in der Linux-Dokumentation. Das folgende Beispiel zeigt, wie Sie die noatime Option für ein Volume aktivieren, das in einer virtuellen Azure-Maschine bereitgestellt wird.
Der Eintrag für den Bereitstellungspunkt in /etc/fstab:
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /data1 xfs rw,attr2,noatime 0 0
Im vorherigen Beispiel stellt UUID das Gerät dar, das Sie mit dem blkid Befehl finden können.
Forced Unit Access (FUA)-I/O-Subsystemfunktion in SQL Server
Einige unterstützte Linux-Distributionen implementieren erzwungenen Einheitenzugriff (Forced Unit Access, FUA) auf I/O-Subsystemebene, um die Datenbeständigkeit sicherzustellen. SQL Server nutzt diese Funktion, um eine effiziente und zuverlässige E/A-Leistung für Linux-Workloads bereitzustellen. Weitere Informationen zur FUA-Unterstützung für linux-Verteilungen und deren Auswirkungen auf SQL Server finden Sie unter SQL Server auf Linux: Forced Unit Access (FUA) Internals.
Unterstützung für FUA im E/A-Subsystem wurde in SUSE Linux Enterprise Server 12 SP5, Red Hat Enterprise Linux 8.0 und Ubuntu 18.04 eingeführt. Verwenden Sie in SQL Server 2017 (14.x) CU 6 und höher die folgende Konfiguration, um leistungsstarke und effiziente E/A mit FUA in SQL Server zu ermöglichen.
Verwenden Sie diese empfohlene Konfiguration, wenn die folgenden Bedingungen erfüllt sind:
SQL Server 2017 (14.x) CU 6 und höhere Versionen
Linux-Distribution und -Version, die die FUA-Funktion unterstützt (ab Red Hat Enterprise Linux 8.0, SUSE Linux Enterprise Server 12 SP5 oder Ubuntu 18.04)
Note
Ab SQL Server 2025 (17.x) wird SUSE Linux Enterprise Server (SLES) nicht unterstützt.
XFS-Dateisystem für SQL Server-Speicher unter Linux Kernel 4.18 oder höher.
ext4 Dateisystem für SQL Server-Speicher auf Linux-Kernel 5.6 oder späteren Versionen.
Note
Verwenden Sie das XFS-Dateisystem zum Hosten von SQL Server-Daten und Transaktionsprotokolldateien, wenn die Linux-Kernelversion niedriger als 5.6 ist. Ab kernel Version 5.6 können Sie basierend auf Ihren spezifischen Anforderungen zwischen XFS und Ext4 wählen.
Speichersubsystem und Hardware, das FUA-Funktionen unterstützt und konfiguriert ist
Empfohlene Konfiguration:
Aktivieren Sie das Ablaufverfolgungs-Flag 3979 als Start-Up-Parameter.
Verwenden Sie
mssql-conf, umcontrol.writethrough = 1undcontrol.alternatewritethrough = 0zu konfigurieren.
Verwenden Sie für fast alle anderen Konfigurationen, die die vorherigen Bedingungen nicht erfüllen, die folgende empfohlene Konfiguration:
Aktivieren Sie den Trace Flag 3982 als Startparameter (das ist der Standard für SQL Server im Linux-Ökosystem), und stellen Sie sicher, dass der Trace Flag 3979 nicht als Startparameter aktiviert wird.
Verwenden Sie
mssql-conf, umcontrol.writethrough = 1undcontrol.alternatewritethrough = 1zu konfigurieren.
FUA-Unterstützung für SQL Server-Container, die in Kubernetes bereitgestellt werden
Der SQL Server muss den persistent bereitgestellten Speicher verwenden und nicht
overlayfs.Der Speicher muss die XFS - oder Ext4-Dateisysteme verwenden und FUA unterstützen (ext4 unterstützt FUA nicht im Linux-Kernel vor Version 5.6). Bevor Sie diese Einstellung aktivieren, arbeiten Sie mit Ihrem Linux-Verteilungs- und Speicheranbieter zusammen, um sicherzustellen, dass das Betriebssystem und das Speichersubsystem FUA-Optionen unterstützen. In Kubernetes können Sie den Dateisystemtyp mithilfe des folgenden Befehls abfragen, wobei
<pvc-name>IhrPersistentVolumeClaimist:kubectl describe pv <pvc-name>Suchen Sie in der Ausgabe nach dem
fstype, das auf XFS festgelegt ist.Der Workerknoten, der die SQL Server-Pods hostet, sollte eine Linux-Verteilung und -Version verwenden, die FUA-Funktion unterstützt (beginnend mit Red Hat Enterprise Linux Linux 8.0, SUSE Linux Enterprise Server 12 SP5 oder Ubuntu 18.04).
Wenn die vorstehenden Bedingungen erfüllt sind, verwenden Sie die folgenden empfohlenen FUA-Einstellungen:
Aktivieren Sie das Ablaufverfolgungs-Flag 3979 als Start-Up-Parameter.
Verwenden Sie
mssql-conf, umcontrol.writethrough = 1undcontrol.alternatewritethrough = 0zu konfigurieren.
Kerneleinstellungen und CPU-Einstellungen für hohe Leistung
Im folgenden Abschnitt werden die für das Linux-Betriebssystem empfohlenen Einstellungen erläutert, um bei einer SQL Server-Installation hohe Leistung und einen hohen Durchsatz zu erzielen. Der Prozess zum Konfigurieren dieser Einstellungen wird in der Dokumentation zu Ihrer Linux-Distribution beschrieben. Mithilfe von TuneD können Sie wie beschrieben viele CPUs und Kernelkonfigurationen konfigurieren, die im nächsten Abschnitt beschrieben werden.
Verwenden von TuneD zum Konfigurieren von Kerneleinstellungen
Für Benutzer von Red Hat Enterprise Linux (RHEL) konfiguriert das TuneD-Leistungsprofil automatisch einige Kernel- und CPU-Einstellungen (mit Ausnahme von C-Zuständen). Ab RHEL 8.0 können Sie ein TuneD-Profil mit der Bezeichnung mssql verwenden, das feiner abgestimmte leistungsbezogene Linux-Optimierungen für SQL-Server-Workloads bietet. Dieses Profil basiert auf dem RHEL-Durchsatzleistungsprofil. Da das mssql Profil alle Einstellungen verfügbar macht, können Sie sie für andere Linux-Distributionen oder RHEL-Versionen überprüfen und anpassen, die dieses Profil nicht enthalten.
Für SUSE Linux Enterprise Server 12 SP5, Ubuntu 18.04 und Red Hat Enterprise Linux 7.x können Sie das tuned Paket manuell installieren. Verwenden Sie es, um das mssql Profil zu erstellen und zu konfigurieren, wie im folgenden Abschnitt beschrieben.
Note
Ab SQL Server 2025 (17.x) wird SUSE Linux Enterprise Server (SLES) nicht unterstützt.
Empfohlene Linux-Einstellungen für ein optimiertes TuneD-Profil mssql
Im folgenden Beispiel wird eine TuneD-Konfiguration für SQL Server für Linux bereitgestellt.
[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
Wenn Sie Linux-Distributionen mit Kernelversionen verwenden, die größer als 4.18 sind, kommentieren Sie die folgenden Optionen wie dargestellt. Entfernen Sie andernfalls die Kommentare zu den folgenden Optionen, wenn Sie Verteilungen mit Kernelversionen verwenden, die älter als 4.18 sind.
# kernel.sched_latency_ns = 60000000
# kernel.sched_migration_cost_ns = 500000
# kernel.sched_min_granularity_ns = 15000000
# kernel.sched_wakeup_granularity_ns = 2000000
Zum Aktivieren dieses TuneD-Profils speichern Sie diese Definitionen in einer tuned.conf-Datei im Ordner /usr/lib/tuned/mssql und aktivieren das Profil mithilfe der folgenden Befehle:
chmod +x /usr/lib/tuned/mssql/tuned.conf
tuned-adm profile mssql
Stellen Sie sicher, dass das Profil aktiv ist, indem Sie den folgenden Befehl verwenden:
tuned-adm active
Oder:
tuned-adm list
Empfehlung für CPU-Einstellungen
In der folgenden Tabelle finden Sie Empfehlungen für die CPU-Einstellungen:
| Setting | Value | Weitere Informationen |
|---|---|---|
| CPU frequency governor (Kontrolle der CPU-Häufigkeit) | Leistung | Dokumentation zum Befehl cpupower |
| ENERGY_PERF_BIAS | Leistung | Dokumentation zum Befehl x86_energy_perf_policy |
| min_perf_pct | 100 | Dokumentation zum Status „intel p“ |
| C-States | Nur C1 | In der Linux- oder Systemdokumentation erhalten Sie Informationen dazu, wie Sie sicherstellen können, dass die Einstellung „C-States“ (C-Status) auf „C1 only“ (Nur C1) festgelegt ist. |
Wenn Sie TuneD wie beschrieben verwenden, konfiguriert sie automatisch die CPU-Frequenzkontrolle, ENERGY_PERF_BIASund min_perf_pct einstellungen. Es verwendet das Durchsatzleistungsprofil als Basis für das mssql Profil. Sie müssen den Parameter C-States manuell entsprechend der Dokumentation konfigurieren, die von Linux oder Ihrem Systemverteiler bereitgestellt wird.
Empfehlungen zu Datenträgereinstellungen
In der folgenden Tabelle finden Sie Empfehlungen für die Datenträgereinstellungen:
| Setting | Value | Weitere Informationen |
|---|---|---|
Datenträger readahead |
4096 | Dokumentation zum Befehl blockdev |
| sysctl-Einstellungen | kernel.sched_min_granularity_ns = 15000000kernel.sched_wakeup_granularity_ns = 2000000vm.dirty_ratio = 80vm.dirty_background_ratio = 3vm.swappiness = 1 |
Dokumentation zum Befehl sysctl |
Description
vm.swappiness: Dieser Parameter steuert die relative Gewichtung, die dem Austausch des Laufzeitprozessspeichers im Verhältnis zum Dateisystemcache gegeben wird. Der Standardwert für diesen Parameter ist 60, der den Austausch von Laufzeitprozessspeicherseiten im Vergleich zum Entfernen von Dateisystemcacheseiten mit einem Verhältnis von 60:140 angibt. Das Festlegen des Werts auf 1 gibt eine starke Einstellung an, die Laufzeitprozessspeicher im physischen Speicher auf Kosten des Dateisystemcaches beizubehalten. Da SQL Server den Pufferpool als Daten-Cache verwendet und es dringend vorzieht, den Dateisystem-Cache für eine zuverlässige Wiederherstellung zu umgehen, kann eine aggressive Swappiness-Konfiguration vorteilhaft für hochleistungsfähige und dedizierte SQL Server sein.Weitere Informationen finden Sie in der Dokumentation zu /proc/sys/vm/ - #swappiness.
vm.dirty_*Schreibzugriffe auf SQL Server-Dateien werden nicht zwischengespeichert, um die Anforderungen an Datenintegrität zu erfüllen. Diese Parameter ermöglichen eine effiziente asynchrone Schreibleistung und senken die E/A-Speicherauswirkung von Cacheschreibvorgängen unter Linux, indem ermöglicht wird, dass der Umfang für das Zwischenspeichern eine ausreichende Größe aufweist und Leervorgänge gedrosselt werden.kernel.sched_*: Diese Parameterwerte stellen die aktuelle Empfehlung zum Optimieren des CfS-Algorithmus (Completely Fair Scheduling) im Linux-Kernel dar. Sie verbessern den Durchsatz von Netzwerk- und Speicher-E/A-Aufrufen im Hinblick auf prozessübergreifende Vor- und Wiederaufnahme von Threads.
Mithilfe des mssql TuneD-Profils werden die vm.swappiness, vm.dirty_* und kernel.sched_* Einstellungen konfiguriert. Sie müssen die Datenträgereinstellung readahead mithilfe des blockdev Befehls für jedes Gerät manuell konfigurieren.
Kerneleinstellung für den automatischen NUMA-Balancing auf Multinode-NUMA-Systemen
Wenn Sie SQL Server auf einem Multinode NUMA-System installieren, ist die folgende kernel.numa_balancing Kerneleinstellung standardmäßig aktiviert. Damit SQL Server auf einem NUMA-System mit maximaler Effizienz arbeiten kann, deaktivieren Sie den automatischen NUMA-Balancing auf einem Multinode-NUMA-System:
sysctl -w kernel.numa_balancing=0
Mithilfe des TuneD-Profils mssql wird die Einstellung kernel.numa_balancing konfiguriert.
Kerneleinstellungen für virtuelle Adressräume
Die Standardeinstellung vm.max_map_count lautet 65536 (65.536), die für eine SQL Server Installation möglicherweise nicht hoch genug ist. Ändern Sie daher den vm.max_map_count Wert für eine SQL Server Bereitstellung auf mindestens 262144 (262.144). Weitere Optimierungen dieser Kernelparameter finden Sie in den vorgeschlagenen Linux-Einstellungen mithilfe eines Abschnitts "TuneD mssql profile" . Der Maximalwert vm.max_map_count ist 2147483647 (2.147.483.647).
sysctl -w vm.max_map_count=1600000
Mithilfe des TuneD-Profils mssql wird die Einstellung vm.max_map_count konfiguriert.
Lassen Sie die Option „Transparent Huge Pages“ aktiviert.
Die meisten Linux-Installationen haben diese Option standardmäßig aktiviert. Lassen Sie diese Konfigurationsoption aktiviert, um eine konsistente Leistung zu erzielen. Wenn in SQL Server-Bereitstellungen jedoch hohe Speicherauslagerungsaktivitäten mit mehreren Instanzen auftreten oder die SQL Server-Ausführung mit anderen speicherintensiven Anwendungen auf dem Server erfolgt, testen Sie die Leistung Ihrer Anwendung, nachdem Sie den folgenden Befehl ausgeführt haben.
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Alternativ können Sie das TuneD-Profil mssql um die folgende Zeile ergänzen:
vm.transparent_hugepages=madvise
Und stellen Sie sicher, dass das mssql Profil nach der Änderung aktiv ist:
tuned-adm off
tuned-adm profile mssql
Mithilfe des TuneD-Profils mssql wird die Einstellung transparent_hugepage konfiguriert.
Empfehlungen für Netzwerkeinstellungen
Berücksichtigen Sie zusammen mit Speicher- und CPU-Empfehlungen die folgenden netzwerkspezifischen Empfehlungen. Verschiedene NICs bieten unterschiedliche Einstellungen. Wenden Sie sich für Hinweise zu jeder dieser Optionen an die NIC-Anbieter. Testen und konfigurieren Sie diese Einstellungen in Entwicklungsumgebungen, bevor Sie sie auf Produktionsumgebungen anwenden. Die folgenden Optionen werden anhand von Beispielen erläutert. Die verwendeten Befehle sind vom Typ und Hersteller des Netzwerkadapters abhängig.
Konfigurieren Sie die Netzwerkport-Puffergröße. Im Beispiel heißt
eth0die NIC , die eine Intel-basierte NIC ist. Für Intel-basierte Netzwerkkarten wird eine Puffergröße von 4 KB (4.096 Byte) empfohlen. Überprüfen Sie die vorab festgelegten Höchstwerte, und konfigurieren Sie diese anhand des folgenden Beispiels:Überprüfen Sie die voreingestellten Höchstwerte mit dem folgenden Befehl. Ersetzen Sie
eth0durch den Namen Ihrer Netzwerkkarte:ethtool -g eth0Legen Sie sowohl die Puffergröße für
rx(Empfangen) als auch fürtx(Übertragen) auf 4 KB fest:ethtool -G eth0 rx 4096 tx 4096Überprüfen Sie, ob der Wert ordnungsgemäß konfiguriert ist:
ethtool -g eth0Aktivieren von Großrahmen. Stellen Sie sicher, dass alle Netzwerkswitches, Router und alle anderen wichtigen Bestandteile des Netzwerkpaketpfads zwischen den Clients und der SQL Server-Instanz Großrahmen unterstützen, bevor Sie Großrahmen aktivieren. Nur dann kann die Aktivierung von Jumbo-Frames die Leistung verbessern. Nachdem Sie Jumbo-Frames aktiviert haben, stellen Sie eine Verbindung mit SQL Server her, und ändern Sie die Netzwerkpaketgröße mithilfe von
sp_configureauf 8060, wie im folgenden Beispiel gezeigt:# 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; GOKonfigurieren Sie adaptive IRQ-Bündelung. Legen Sie standardmäßig den Port für adaptive RX/TX IRQ-Zusammenführung fest, was bedeutet, dass die Unterbrechungsübermittlung angepasst wird, um die Latenz zu verbessern, wenn die Paketrate niedrig ist, und verbessern Sie den Durchsatz, wenn die Paketrate hoch ist. Diese Einstellung ist möglicherweise nicht in Ihrer Netzwerkinfrastruktur verfügbar. Überprüfen Sie daher die vorhandene Netzwerkinfrastruktur, und vergewissern Sie sich, dass diese Einstellung unterstützt wird. Das Beispiel ist für die NIC mit dem Namen
eth0, die eine Intel-basierte Netzwerkkarte ist:Legen Sie den Port für die adaptive RX/TX-IRQ-Zusammenführung fest:
ethtool -C eth0 adaptive-rx on ethtool -C eth0 adaptive-tx onBestätigen Sie die Einstellung:
ethtool -c eth0Note
Deaktivieren Sie für vorhersehbares Verhalten in Hochleistungsumgebungen, z. B. in Umgebungen zum Benchmarking, die adaptive RX/TX-IRQ-Koaleszenz, und stellen Sie dann gezielt die RX/TX-Unterbrechungskoaleszenz ein. Die folgenden Beispielbefehle deaktivieren die RX/TX-IRQ-Zusammenführung und legen dann die speziellen Werte fest:
Deaktivieren Sie die adaptive RX/TX-IRQ-Zusammenführung:
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx offBestätigen Sie die Änderung:
ethtool -c eth0Legen Sie die Parameter
rx-usecsundirqfest.rx-usecsgibt an, wie viele Mikrosekunden nach dem Empfang von mindestens einem Paket vergehen, bevor ein Interrupt generiert wird. Der Parameterirqgibt die entsprechenden Verzögerungen beim Aktualisieren des Status an, wenn der Interrupt deaktiviert ist. Für Intel-basierte NICs können Sie die folgenden Einstellungen verwenden:ethtool -C eth0 rx-usecs 100 tx-frames-irq 512Bestätigen Sie die Änderung:
ethtool -c eth0Aktivieren Sie die empfangsseitige Skalierung (RSS) und kombinieren Sie standardmäßig die RX- und TX-Seite von RSS-Warteschlangen. Bei der Arbeit mit dem Microsoft-Support gibt es bestimmte Szenarien, in denen das Deaktivieren von RSS auch die Leistung verbessert. Testen Sie diese Einstellung in Testumgebungen, bevor Sie sie in Produktionsumgebungen anwenden. Das folgende Beispiel gilt für Intel-Netzwerkadapter.
Rufen Sie die vorab festgelegten Höchstwerte ab:
ethtool -l eth0Kombinieren Sie die Warteschlangen mit dem Wert, der im vorab festgelegten Höchstwert „Combined“ (Kombiniert) gemeldet wird. In diesem Beispiel ist der Wert auf
8festgelegt:ethtool -L eth0 combined 8Überprüfen Sie die Einstellung:
ethtool -l eth0Konfigurieren Sie die NIC-Port-IRQ-Affinität. Um die erwartete Leistung durch Optimierung der IRQ-Affinität zu erzielen, sollten Sie einige wichtige Parameter berücksichtigen, wie die Linux-bezogene Behandlung der Servertopologie, den NIC-Treiber-Stack, die Standardeinstellungen und die
irqbalanceEinstellung. Sie können die Einstellungen für die IRQ-Affinität des NIC-Ports optimieren, indem Sie Ihr Wissen über die Servertopologie nutzen,irqbalancedeaktivieren und die NIC-herstellerspezifischen Einstellungen verwenden.Die Konfiguration wird anhand des folgenden Beispiel für die spezifische Netzwerkinfrastruktur von Mellanox erläutert. Unter Leistungsoptimierungstools für Mellanox-Netzwerkadapter finden Sie weitere Informationen und können auch das Mellanox-Tool mlnx herunterladen. Die Befehle weichen je nach Umgebung ab. Wenden Sie sich an den jeweiligen NIC-Anbieter, um weitere Informationen zu erhalten.
Deaktivieren Sie
irqbalance, oder rufen Sie eine Momentaufnahme der IRQ-Einstellungen ab, und erzwingen Sie das Beenden des Daemons:systemctl disable irqbalance.serviceOder:
irqbalance --oneshotStellen Sie sicher, dass die
common_irq_affinity.shausführbar ist:chmod +x common_irq_affinity.shZeigen Sie die IRQ-Affinität für den Mellanox-NIC-Port (z. B.
eth0) an:./show_irq_affinity.sh eth0Optimieren Sie die optimale Durchsatzleistung mit einem Mellanox-Tool:
./mlnx_tune -p HIGH_THROUGHPUTLegen Sie die Hardwareaffinität auf den NUMA-Knoten fest, der die NIC und den zugehörigen Port physisch hostet:
./set_irq_affinity_bynode.sh `\cat /sys/class/net/eth0/device/numa_node` eth0Überprüfen Sie die IRQ-Affinität:
./show_irq_affinity.sh eth0IRQ-Koaleszenz-Optimierungen hinzufügen:
ethtool -C eth0 adaptive-rx off ethtool -C eth0 adaptive-tx off ethtool -C eth0 rx-usecs 750 tx-frames-irq 2048Überprüfen Sie die Einstellungen:
ethtool -c eth0Überprüfen Sie die NIC-Geschwindigkeit. Nachdem Sie die vorherigen Änderungen vorgenommen haben, überprüfen Sie die Geschwindigkeit der NIC, um sicherzustellen, dass sie Ihren Erwartungen entspricht, indem Sie den folgenden Befehl verwenden:
ethtool eth0 | grep -i Speed
Erweiterte Kernel- und Betriebssystemkonfiguration
Verwenden Sie für die optimale Speicher-E/A-Leistung die Mehrfachwarteschlange-Planung von Linux für Blockgeräte. Diese Planungsmethode ermöglicht es der Blockschichtleistung, gut auf schnelle Festkörperlaufwerke (Solid State Drives, SSDs) und Multicore-Systeme zu skalieren. Überprüfen Sie die Dokumentation, um festzustellen, ob Ihre Linux-Verteilung sie standardmäßig aktiviert. In den meisten anderen Fällen können Sie den Kernel
scsi_mod.use_blk_mq=ystarten, um ihn zu aktivieren. Die Dokumentation für Ihre Linux-Verteilung enthält möglicherweise weitere Anleitungen zu dieser Einstellung. Diese Einstellung entspricht dem upstream-Linux-Kernel.Da Multipath-E/A häufig für SQL Server Bereitstellungen verwendet wird, konfigurieren Sie das Multiqueue-Ziel (Device Mapper, DM) für die Verwendung der
blk-mqInfrastruktur, indem Sie diedm_mod.use_blk_mq=yKernelstartoption aktivieren. Der Standardwert lautetn(Deaktiviert). Diese Einstellung reduziert den Sperraufwand auf der DM-Ebene, wenn die zugrunde liegenden SCSI-Geräteblk-mqverwenden. Weitere Informationen zum Konfigurieren von Multipath-E/A finden Sie in der Dokumentation Ihrer Linux-Verteilung.
Konfigurieren der Auslagerungsdatei
Stellen Sie sicher, dass Sie über eine ordnungsgemäß konfigurierte Auslagerungsdatei verfügen, damit keine Probleme mit dem Arbeitsspeicher auftreten. In der Linux-Dokumentation erhalten Sie Informationen über die Erstellung und ordnungsgemäße Größenanpassung von Auslagerungsdateien. Wenn Sie planen, Container auszuführen, aktivieren Sie swap space auf Hostebene.
VMs und dynamischer Arbeitsspeicher
Wenn Sie SQL Server für Linux auf einem virtuellen Computer ausführen, stellen Sie sicher, dass Sie Optionen auswählen, die den für den virtuellen Computer reservierten Arbeitsspeicher beheben. Verwenden Sie keine Features wie Hyper-V Dynamic Memory.
SQL Server-Konfiguration
Führen Sie die folgenden Konfigurationsaufgaben aus, nachdem Sie SQL Server unter Linux installiert haben, um die beste Leistung für Ihre Anwendung zu erzielen.
Bewährte Methoden
Die folgenden Methoden gelten für alle SQL Server für Linux Bereitstellungen.
Verwenden von PROCESS AFFINITY für Knoten und CPUs
Verwenden Sie ALTER SERVER CONFIGURATION, um PROCESS AFFINITY für alle NUMANODEs und CPUs festzulegen, die Sie für SQL Server unter Linux verwenden (in der Regel für alle NODEs und CPUs). Die Prozessoraffinität trägt dazu bei, ein effizientes Linux- und SQL-Planungsverhalten aufrechtzuerhalten. Die Verwendung der Option NUMANODE ist die einfachste Methode. Verwenden Sie PROCESS AFFINITY selbst dann, wenn Sie auf Ihrem Computer nur einen NUMA-Knoten haben. Weitere Informationen zum Festlegen PROCESS AFFINITYfinden Sie im ALTER SERVER CONFIGURATION Artikel.
Konfigurieren mehrerer tempdb-Datendateien
Da eine SQL Server für Linux Installation keine Option zum Konfigurieren mehrerer tempdb Dateien bietet, sollten Sie nach der Installation mehrere tempdb Datendateien erstellen. Weitere Informationen finden Sie unter Empfehlungen zur Verringerung von Speicherplatzkonflikten in der TempDB-Datenbank von SQL Server.
Erweiterte Konfiguration
Informationen zu Speicherkonfigurationsoptionen, einschließlich mssql-conf Speicherbeschränkungen, CGroup-Einstellungen, Beispielen für Docker-Containerspeicher und Überlegungen zum Austausch von Speicherplatz finden Sie unter Bewährte Methoden zur Leistung: SQL Server Arbeitsspeicher unter Linux.