Wir haben eine aktive OLTP 40GB Datenbank auf SQL Server 2014 SP1. Es wurde festgestellt, dass Abfragen langsam sind, da IO_Completion wartet, die Länge der Datenträgerwarteschlange auf 900 steigt und SQL Server nicht mehr reagiert. Was wir versucht haben:
Starten Sie die Instanz neu und innerhalb einer Minute verhält es sich genauso.
Nach dem zweiten Neustart haben wir die Anfangsgröße jeder Tempdb-Datendatei geändert (es wurden 16 Datendateien erstellt) und sie funktioniert nun ordnungsgemäß.
Anmerkung: Wir verwenden Tabellenvariablen für Zwischenergebnismengen. Diese Ergebnismengen sind sehr klein.
Es passierte zweimal im Monat. Jedes Mal, wenn ich den Datendateien manuell etwas Speicherplatz hinzufüge, funktioniert sie normal. Das Interessantere ist, dass das gleiche Setup (gleiche Hardware, gleiche Ordner- und Dateieinstellungen, gleiche Arbeitslast), das wir unter SQL Server 2008 R2 und SQL Server 2012 haben, einwandfrei funktioniert.
Bitte helfen Sie uns, eine dauerhafte Lösung zu finden.
Die anfängliche Größe aller Datendateien ist 1000 MB, die aktuelle Größe beträgt jeweils 1500 MB. Alle sind identisch. Das automatische Wachstum beträgt jeweils 100 MB. Davor hatten wir mit PFS- und GAM-Seiten zu kämpfen und sind auf 16 gestiegen. Das Problem wurde behoben. Beide Trace-Flags 1117 und 1118 sind aktiviert. 24 Kerne auf 2 NUMA-Knoten. Alle Datendateien befinden sich auf demselben Volume. Einfache Festplatte, kein SAN.
Die Instanz befindet sich auf einem physischen Computer. Abfragen mit Tabellenvariablen und Abfragen mit Hash-Joins erzeugen am häufigsten Wartezeiten für IO_Completion.
Die ausführliche Antwort von wBob veranlasste uns, genauer zu suchen. Wie haben wir es vorher verpasst:
Das automatische Anwachsen der Datei 'templog' in der Datenbank 'tempdb' wurde vom Benutzer abgebrochen oder ist nach 7704 Millisekunden abgelaufen. Verwenden Sie ALTER DATABASE, um einen kleineren FILEGROWTH-Wert für diese Datei festzulegen oder eine neue Dateigröße explizit festzulegen.
Dies haben wir im Protokoll gefunden, wenn ein solches Problem auftritt. Wir verschieben TempDB, um schnelles Laufwerk zu trennen.