Ok, dla wszystkich zainteresowanych
Rozwiązaliśmy problem w pytaniu kilka miesięcy temu, po prostu instalując bezpośrednio podłączone dyski SSD na każdym z 3 serwerów oraz przenosząc dane DB i pliki dziennika z SAN na te dyski SSD
Oto podsumowanie tego, co zrobiłem, aby zbadać ten problem (korzystając z rekomendacji ze wszystkich postów to pytanie), zanim zdecydowaliśmy się zainstalować dyski SSD:
1) rozpoczął zbieranie liczników PerfMon dla następujących napędów na wszystkich 3 serwerach:
Disk F:
jest dyskiem logicznym opartym na sieci SAN, zawiera pliki danych MDF
Disk I:
jest dyskiem logicznym opartym na sieci SAN, zawiera pliki dziennika LDF
Disk T:
jest bezpośrednio podłączony dysk SSD, dedykowany wyłącznie do tempDB
Zdjęcie poniżej to średnie wartości zebrane dla okresu 2 tygodni
Disk I: (LDF)
ma tak małe We /
Wy, a opóźnienie jest bardzo niskie, więc Dysk I: można zignorować Widać, że Disk T: (TempDB)
ma większe We / Wy w porównaniu do Disk F: (MDF)
i ma znacznie lepsze opóźnienie w tym samym czasie - 0 ms
Oczywiście coś jest nie tak z dyskiem F: gdzie znajdują się pliki danych, ma wysokie opóźnienia i średnią kolejkę zapisu dysku, pomimo niskiego IO
2) Sprawdzone opóźnienie dla poszczególnych baz danych za pomocą zapytania z tej witryny
https://www.brentozar.com/blitz/slow-storage-reads-writes/
Niewiele aktywnych baz danych na serwerze podstawowym miało opóźnienie odczytu 150-250 ms i opóźnienie zapisu 150-450 ms
Co ciekawe, pliki bazy danych master i msdb miały opóźnienie odczytu do 90 ms, co jest podejrzane, biorąc pod uwagę mały rozmiar ich danych i niskie IO - kolejna wskazówka, że coś jest nie tak z SAN
3) Nie było konkretnych terminów
Podczas których pojawił się komunikat „SQL Server napotkał wystąpienia ...”
Podczas logowania te komunikaty nie wymagały konserwacji ani dużego obciążenia dysku ETL
4) Podgląd zdarzeń systemu Windows
Nie pokazywał żadnych innych wpisów wskazujących na problem, z wyjątkiem „SQL Server napotkał wystąpienia ...”
5) Rozpocząłem sprawdzanie 10 najważniejszych zapytań
Od sp_BlitzCache (procesor, odczyty itp.) I optymalizacja tam, gdzie to możliwe
Brak ciężkich zapytań super IO, które zmarnowałyby tony danych i miałyby duży wpływ na pamięć masową, chociaż
indeksowanie w bazach danych jest OK, utrzymuję to
6) Nie mamy zespołu SAN
Mamy tylko 1 sysadmin, który okazjonalnie pomaga
Ścieżka sieciowa do SAN - jest multipatowana, każdy z 3 serwerów ma 2 kable sieciowe prowadzące do przełączników, a następnie do SAN, i ma to być 1 Gigabajt / s
7) Brak wyników CrystalDiskMark
Lub jakikolwiek inny wynik testu porównawczego z czasów konfiguracji serwerów, więc nie wiem, jakie powinny być prędkości , i nie można w tym momencie przeprowadzić testu porównawczego, aby zobaczyć, jakie są obecnie prędkości, ponieważ miałoby to wpływ na produkcję
8) Skonfiguruj sesję Extended Events na zdarzeniu punktu kontrolnego dla danej bazy danych
Sesja XE pomogła odkryć, że podczas komunikatów „SQL Server napotkał wystąpienia ...” punkt kontrolny działał bardzo wolno (do 90 sekund)
9) Dziennik błędów programu SQL Server
Zawiera wpisy „FlushCache” „Nasycenie” Powinny
się pojawiać, gdy czas punktu kontrolnego dla danej bazy danych przekroczy ustawienia interwału odzyskiwania
Szczegóły pokazały, że ilość danych, które punkt kontrolny próbuje spłukać, jest niewielka i zajmuje dużo czasu, a ogólna prędkość wynosi około 0,25 MB / s ... dziwne
10) Na koniec to zdjęcie pokazuje tabelę rozwiązywania problemów z pamięcią:
Wygląda na to, że po prostu mamy „Problem sprzętowy: - Współpracuj z administratorem systemu / sprzedawcą sprzętu, aby naprawić wszelkie błędne konfiguracje SAN, starych / wadliwych sterowników, kontrolerów, oprogramowania układowego itp.”
W innym pytaniu „Powolny punkt kontrolny ...” Powolny punkt kontrolny i 15-sekundowe ostrzeżenia we / wy w pamięci flash
Sean miał bardzo ładną listę elementów, które należy sprawdzić na poziomie sprzętu i oprogramowania, aby rozwiązać problemy
Nasz sysadmin nie mógł sprawdzić wszystkich rzeczy z listy, więc po prostu postanowiliśmy rzucić trochę sprzętu na ten problem - wcale nie było drogo
Rozkład:
Zamówiliśmy dyski SSD 1 TB i zainstalowaliśmy je bezpośrednio na serwerach
Ponieważ mamy Grupy dostępności, zmigrowałem pliki danych DB z SAN na SSD w replikach pomocniczych, a następnie przełączyłem awaryjnie i migrowałem pliki na byłych podstawach. Pozwoliło to na minimalny całkowity czas przestoju - mniej niż 1 minutę
Teraz każdy serwer ma lokalną kopię danych DB, a do wspomnianej sieci SAN wykonywane są kopie zapasowe pełne / diff / log.
Żadnych komunikatów o wystąpieniach „SQL Server napotkał wystąpienia ...” w dziennikach Podglądu zdarzeń systemu Windows oraz wydajności wykonywania kopii zapasowych, kontroli integralności, przebudowy indeksu, zapytania itp. znacznie wzrosły
Ile poprawiła się wydajność pod względem opóźnień we / wy od migracji plików DB na dysk SSD?
Aby ocenić wpływ, wykorzystana wydajność Dzienniki Monitora wydajności systemu Windows 2 tygodnie przed migracją i 4 tygodnie po migracji:
Poniżej znajduje się porównanie statystyk opóźnień na poziomie DB (używane statystyki przechwyconych plików wirtualnych programu SQL Server przed i po migracji)
streszczenie
Migracja z SAN do bezpośrednio podłączonych lokalnych dysków SSD była tego warta.
Miało to ogromny wpływ na opóźnienie pamięci i poprawiło się średnio o ponad 90% (szczególnie operacje WRITE), a my nie mamy już skoków 20-50 sekund na IO
Przejście na lokalny dysk SSD rozwiązało nie tylko problemy z wydajnością pamięci, ale także bezpieczeństwo danych, o które martwiłem się (jeśli SAN ulegnie awarii, wszystkie 3 serwery tracą swoje dane w tym samym czasie)