Mamy aktywną bazę danych OLTP 40 GB na SQL Server 2014 SP1. Stwierdzono, że zapytania są powolne, ponieważ IO_Completion czeka, długość kolejki dysków wzrasta do 900, a SQL Server przestaje odpowiadać. Co próbowaliśmy:
Zrestartuj instancję, a po minucie zacznie zachowywać się w ten sam sposób.
Po drugim ponownym uruchomieniu zmieniliśmy początkowy rozmiar każdego pliku danych tempdb (utworzono 16 plików danych) i zaczyna on działać poprawnie.
Uwaga: Używamy zmiennych tabeli do pośrednich zestawów wyników. Te zestawy wyników są bardzo małe.
Stało się to dwa razy w miesiącu. Za każdym razem, gdy ręcznie dodam trochę miejsca do plików danych, zaczyna ono działać normalnie. Bardziej interesujące jest to, że ta sama konfiguracja (ten sam sprzęt, ta sama konfiguracja folderów i plików, to samo obciążenie) mamy na SQL Server 2008 R2 i SQL Server 2012 działa dobrze.
Prosimy o pomoc w znalezieniu stałego rozwiązania.
Początkowy rozmiar wszystkich plików danych jest taki sam 1000 MB, bieżący to 1500 MB każdy. Wszystkie są identyczne. Autogrowth to 100 MB na każdy. Wcześniej mieliśmy do czynienia z rywalizacją o strony PFS i GAM i wzrosła do 16 i problem został rozwiązany. Obie flagi śledzenia 1117 i 1118 są włączone. 24 rdzenie na 2 węzłach NUMA. Wszystkie pliki danych znajdują się na tym samym woluminie. Prosty dysk, brak SAN.
Instancja znajduje się na maszynie fizycznej. Zapytania ze zmiennymi tabel i zapytania z łączeniami mieszającymi najczęściej generują oczekiwania na zakończenie IO_Completion.
Szczegółowa odpowiedź wBob zmusiła nas do szukania bardziej szczegółowych informacji. Jak to przegapiliśmy wcześniej:
Autogrow pliku „templog” w bazie danych „tempdb” został anulowany przez użytkownika lub upłynął limit czasu po 7704 milisekundach. Użyj ZMIEŃ bazę danych, aby ustawić mniejszą wartość FILEGROWTH dla tego pliku lub jawnie ustawić nowy rozmiar pliku.
Znaleźliśmy to w dzienniku, gdy występuje kiedykolwiek tego rodzaju problem. Przenosimy TempDB do oddzielnego szybkiego dysku.
źródło