Kompatibilität der VirtIO-Win-Treiber mit MS-SQL-Server-Workloads
Bekanntes Kompatibilitätsproblem mit VirtIO-Win-Treibern bei Windows-VMs mit MS SQL Server unter hoher I/O-Last, einschließlich empfohlener Version, Prüfschritten und eines sauberen Downgrade-Verfahrens.
Überblick
Windows-VMs, auf denen MS SQL Server unter VergeOS läuft, können einen Strom von SQL Server-"read-retry"-Protokolleinträgen erzeugen — und in einigen Fällen nach einigen Tagen anhaltender Last einen hängenden SQL Server-Dienst — wenn der Gast virtio-win v0.1.285 oder v0.1.292. Die Grundursache ist eine nicht-atomare SRB-ID-Zuweisung in den vioscsi/viostor Storport-Miniports, die doppelte IDs zulassen, wenn Windows I/O parallel über mehrere CPUs verteilt wird (upstream als virtio-win issue #1453).
Das Verhalten lässt sich am zuverlässigsten auf Windows Server 2025 weil seine Storport-Implementierung StartIo aggressiver parallelisiert als frühere Windows Server-Versionen. Ältere Windows-Gäste sind von demselben Fehler betroffen, lösen ihn aber seltener aus.
Ein Downgrade der virtio-win-Treiber des Gasts auf v0.1.271 ist ein stabiler Workaround. Ein Fix für die zugrunde liegende Race Condition wurde upstream zusammengeführt und in neueren virtio-win-Builds ausgeliefert, daher sollten auch spätere Releases, die ihn enthalten, sicher sein — bestätigen Sie vor einem Upgrade während des Vorfalls mit dem VergeOS-Support, welche Builds in Ihrer Umgebung als vertrauenswürdig gelten.
Symptome
Wenn Sie dieses Problem auf einer VergeOS-Windows-VM vermuten, suchen Sie im Anwendung Ereignisprotokoll und im SQL Server-Fehlerprotokoll:
nach Read-retry-Meldungen, bei denen die erwarteten und tatsächlichen Werte identisch sind, zum Beispiel:
Ein Lesezugriff auf die Datei '*.mdf' bei Offset 0x... war nach 1 fehlgeschlagenen Versuch(en) mit Fehler erfolgreich: falsche Prüfsumme (erwartet: 0xad4c6778; tatsächlich: 0xad4c6778)
Ein Lesezugriff auf die Datei '*.mdf' bei Offset 0x... war nach 1 fehlgeschlagenen Versuch(en) mit Fehler erfolgreich: falsche PageID (erwartet 1:29669944; tatsächlich 1:29669944)
Kein SRB für ID gefundenEinträgen aus dervioscsiQuelleHängende SQL Server-Dienste nach mehreren Tagen anhaltender hoher Last
Voraussetzungen
Eine Windows-VM, auf der MS SQL Server (oder eine ähnlich I/O-intensive Datenbank-Workload) auf VergeOS läuft
Administrativer Zugriff auf den Windows-Gast
Ein Snapshot der VM, der vor dem Ändern von Treibern erstellt wurde
Der virtio-win v0.1.271 ISO in Ihre VergeOS-Umgebung unter Dateien. Archivierte ISOs sind verfügbar im stable-virtio-Archiv bei Fedora People
Die installierte VirtIO-Treiberversion ermitteln
Bevor Sie etwas ändern, bestätigen Sie, welchen virtio-win-Build der Gast derzeit verwendet.
Geräte-Manager öffnen
Klicken Sie mit der rechten Maustaste auf das Startmenü und wählen Sie Geräte-Manager.
VirtIO-Speichercontroller suchen
Erweitern Sie Speichercontroller.
Klicken Sie mit der rechten Maustaste auf Red Hat VirtIO SCSI-Controller (für vioscsi) oder Red Hat VirtIO SCSI Pass-through-Controller / Red Hat VirtIO SCSI-Festplattengerät (für viostor) und wählen Sie Eigenschaften.
Treiberversion und -datum prüfen
Wechseln Sie zur Treiber Registerkarte.
Notieren Sie die Treiberversion und Treiberdatum Felder.
Mit dem Quell-ISO abgleichen
Der Versionsstempel des Treibers folgt dem
100.<minor>.<build>.<revision>Format, wobei die abschließende Revisionskomponente aus der virtio-win-ISO-Version erstellt wird. Beispielsweise endet einvioscsiTreiber von virtio-win 0.1.285 endet normalerweise auf.28500; 0.1.271 endet normalerweise auf.27100.Wenn Sie unsicher sind, welche ISO den installierten Treiber erzeugt hat, binden Sie die in Frage kommende ISO im Gast ein und vergleichen Sie ihre
vioscsi.inf/viostor.infDriverVerZeile mit dem in Geräte-Manager angezeigten Wert.
Empfohlene Versionen
v0.1.271
Empfohlener Workaround. Letzte Version vor dem betroffenen Commit; unter hoher SQL-Last als stabil bestätigt.
v0.1.285
Vermeiden. Enthält den vioscsi/viostor SRB-ID-Race; erzeugt Read-retry-Fehler auf stark ausgelasteten SQL-VMs.
v0.1.292
Vermeiden. Der gleiche Fehler wie v0.1.285.
Builds nach dem Upstream-Fix (ab Jan. 2026)
Sollte grundsätzlich sicher sein. Bestätigen Sie den konkreten Build mit dem VergeOS-Support, bevor Sie ihn bereitstellen.
Die Downloads der stabilen virtio-win-ISOs sind verfügbar im Fedora People stable-virtio-Repository, und ältere Versionen im archive-virtio-Verzeichnis.
Downgrade auf virtio-win v0.1.271
MS SQL Server-Dienste im Gast stoppen
Stoppen Sie in einer erhöhten PowerShell oder der Dienste-Konsole den SQL Server (MSSQLSERVER) Dienst und alle abhängigen Dienste (SQL-Agent, Volltextsuche, Reporting Services usw.), um I/O vor dem Ändern des Speichertreibers zu beruhigen.
Mounten Sie die virtio-win-v0.1.271-ISO
Bearbeiten Sie in VergeOS die VM und hängen Sie virtio-win-0.1.271.iso als CD/DVD-Gerät ein.
Bestätigen Sie, dass die ISO in Windows sichtbar ist (typischerweise der nächste verfügbare Laufwerksbuchstabe).
Aktuelle virtio-win-Gasttools deinstallieren
Öffnen Sie Einstellungen → Apps & Features (oder Programme und Features in der Systemsteuerung) im Gast.
Suchen Sie Virtio-win-guest-tools und wählen Sie Deinstallieren. Folgen Sie den Anweisungen und starten Sie neu, falls dazu aufgefordert wird.
Wenn die Deinstallation fehlschlägt oder mit Fehler
0x80070643(ein bekanntes Problem beim Entfernen von virtio-win-guest-tools), verwenden Sie Microsofts Programminstallations- und -Deinstallations-Problembehandlung um die Registrierung zu bereinigen, bevor Sie fortfahren.
Starten Sie die VM neu
Starten Sie Windows neu, damit alle gerade verwendeten Treiberdateien freigegeben werden. Die VM sollte weiterhin booten — Windows behält die Storage-Treiber-Binärdateien, bis das neue Paket installiert ist.
Installieren Sie virtio-win-guest-tools von der v0.1.271-ISO
Führen Sie von der eingehängten v0.1.271-ISO aus
virtio-win-guest-tools.exe(odervirtio-win-gt-x64.msials Administrator aus.Schließen Sie die Installation mit der Standardauswahl der Komponenten ab. Dadurch werden vioscsi, viostor, NetKVM und der Gast-Agent mit dem Build v0.1.271 neu installiert.
Starten Sie die VM erneut neu
Starten Sie Windows neu, damit die Storage- und Netzwerkschichten mit den heruntergestuften Treibern neu geladen werden.
Neue Treiberversion überprüfen
Zurück zu Geräte-Manager → Speichercontroller, öffnen Sie die Eigenschaften → Treiber Registerkarte und bestätigen Sie, dass die Treiberversion nun den Build v0.1.271 widerspiegelt (typischerweise endend auf
.27100).Wiederholen Sie dies für alle anderen VirtIO-Controller und für den Red Hat VirtIO Ethernet-Adapter unter Netzwerkadapter.
Starten Sie die MS SQL Server-Dienste
Starten Sie den SQL Server-Dienst und alle abhängigen Dienste und bestätigen Sie, dass die Datenbanken sauber online kommen.
Unter Last überwachen
Nehmen Sie die normalen Workloads wieder auf und beobachten Sie das SQL Server-Fehlerprotokoll und das Windows-Anwendungsprotokoll auf die oben beschriebenen Read-retry-Meldungen. Ein stabiler Betrieb ohne Retries ist das Erfolgskriterium.
Fehlerbehebung
Zusätzliche Ressourcen
Feedback
Zuletzt aktualisiert
War das hilfreich?