| Termin | Definicja |
|---|---|
| IO Stalls | IO Stalls to wskaźnik SQL Server mierzący łączny czas oczekiwania na operacje odczytu i zapisu na dysku. IO Stalls w SQL Server — co dokładnie mierzy ten wskaźnikIO Stalls w Microsoft SQL Server oznacza czas oczekiwania na zakończenie operacji wejścia i wyjścia wykonywanych przez pliki bazy danych. W praktyce chodzi przede wszystkim o odczyty i zapisy realizowane dla plików danych oraz plików dziennika transakcji. SQL Server wysyła żądanie do systemu operacyjnego i magazynu danych, a następnie oczekuje na jego wykonanie. Czas takiego oczekiwania jest rejestrowany jako opóźnienie operacji dyskowej. Wysoka wartość IO Stalls oznacza, że operacje I/O zajmują serwerowi dużo czasu, ale sama wartość nie wskazuje jeszcze, czy przyczyną jest dysk, przeciążenie, niewłaściwa konfiguracja, duża liczba żądań czy sposób działania konkretnego zapytania. W SQL Server dane dotyczące opóźnień plików można odczytać między innymi z dynamicznego widoku zarządzania Odczyt statystyk plików i obliczanie średniego opóźnieniaSam łączny czas IO Stalls jest niewystarczający do oceny wydajności. Należy zestawić go z liczbą odczytów i zapisów. W Przykładowe zapytanie dla SQL Server może wyglądać następująco:
Jak łączyć IO Stalls z objawami przeciążenia I/OWysokie IO Stalls może wynikać z opóźnień urządzenia pamięci masowej, ale również z dużej liczby operacji generowanych przez SQL Server. Plik danych może wykonywać wiele odczytów losowych, gdy zapytania nie korzystają skutecznie z indeksów albo gdy potrzebne strony nie znajdują się w pamięci. Z kolei dziennik transakcji jest obsługiwany w sposób wymagający trwałego zapisu przy zatwierdzaniu transakcji. Jeżeli zapis dziennika jest wolny, może to ograniczać czas realizacji operacji Do uzupełnienia analizy używa się statystyk oczekiwań SQL Server. Oczekiwania typu Ważne jest rozróżnienie wartości skumulowanej od bieżącego pomiaru. Przykładowo plik, który działał przez wiele dni i wykonał miliony operacji, może mieć większy łączny IO Stalls niż plik z krótkim, ale bardzo wolnym epizodem. Dlatego podczas diagnostyki należy wykonywać pomiary w porównywalnych przedziałach czasu oraz obserwować osobno odczyty, zapisy, pliki danych i pliki dziennika. Przydatne jest również zestawienie wyników z aktywnością zapytań, obciążeniem procesora, ilością wolnej pamięci i monitorowaniem urządzenia przechowującego pliki SQL Server. Postępowanie diagnostyczne przy wysokim IO StallsAnalizę należy rozpocząć od ustalenia, który plik generuje największy czas oczekiwania oraz czy problem dotyczy odczytów, zapisów, czy obu rodzajów operacji. Następnie trzeba sprawdzić średnie opóźnienie pojedynczej operacji i liczbę operacji w badanym okresie. Jeżeli opóźnienie jest wysokie tylko dla jednego pliku, podejrzenie może dotyczyć konkretnego woluminu, ścieżki, macierzy lub konfiguracji warstwy przechowywania. Jeżeli podobne wartości występują dla wielu baz i plików, bardziej prawdopodobne jest przeciążenie wspólnego urządzenia albo wspólnego kanału I/O. Wysokie IO Stalls nie powinno być automatycznie leczone przez samo przeniesienie plików lub dodanie indeksów. Najpierw trzeba ustalić źródło żądań. Należy przejrzeć zapytania wykonujące pełne skany dużych tabel, operacje sortowania i agregacje wymagające zapisu do Podczas serwisowania komputera z narzędziami administracyjnymi SQL Server można zebrać wyniki DMV, sprawdzić ścieżki plików i porównać je z obserwowanym obciążeniem. Sama obecność wysokiego IO Stalls nie jest dowodem uszkodzenia dysku ani bazy danych. Jest sygnałem, że warto połączyć pomiary SQL Server z testami stanu nośnika, systemu operacyjnego i aplikacji generującej ruch. Takie podejście pozwala oddzielić rzeczywiste opóźnienia infrastruktury od sytuacji, w której wolne działanie wynika głównie z nadmiernej liczby operacji wykonywanych przez zapytania. |