Dzienniki i dyski danych mają różne wzorce dostępu do danych, które są ze sobą w konflikcie (przynajmniej teoretycznie), gdy współużytkują dysk.
Zapisuje dziennik
Dostęp do dziennika składa się z bardzo dużej liczby małych sekwencyjnych zapisów. W pewnym uproszczeniu dzienniki DB są buforami pierścieniowymi zawierającymi listę instrukcji zapisywania elementów danych w określonych lokalizacjach na dysku. Wzorzec dostępu składa się z dużej liczby małych sekwencyjnych zapisów, które należy zagwarantować do końca - dlatego są zapisywane na dysk.
Idealnie byłoby, gdyby logi były na cichym (tzn. Nie współużytkowanym z niczym innym) woluminie RAID-1 lub RAID-10. Logicznie można zobaczyć proces jako główny DBMS zapisujący wpisy dziennika i jeden lub więcej wątków czytnika dziennika, które zużywają dzienniki i zapisują zmiany na dyskach danych (w praktyce proces jest zoptymalizowany, aby zapisy danych były zapisywane natychmiast, jeśli to możliwe). Jeśli na dyskach dziennika występuje inny ruch, głowice są przenoszone przez te inne wejścia, a sekwencyjne zapisy dziennika stają się losowymi zapisami dziennika. Są one znacznie wolniejsze, więc zajęte dyski dziennika mogą utworzyć punkt aktywny, który działa jako wąskie gardło w całym systemie.
Zapisuje dane
(zaktualizowany) Zapis dziennika musi zostać zatwierdzony na dysk (określany jako nośnik stabilny), aby transakcja była ważna i mogła zostać zatwierdzona. Można to logicznie wyświetlić jako zapisywane wpisy dziennika, a następnie używane jako instrukcje do zapisywania stron danych na dysk w procesie asynchronicznym. W praktyce zapisy stron na dysku są w rzeczywistości przygotowywane i buforowane w momencie dokonywania zapisu w dzienniku, ale nie muszą być zapisywane natychmiast, aby transakcja została zatwierdzona. Bufory dyskowe są zapisywane na stabilnym nośniku (dysku) przez proces Lazy Writer (podziękowania dla Paula Randala za zwrócenie na to uwagi), który ten artykuł Technet omawia nieco bardziej szczegółowo.
Jest to bardzo losowy wzorzec dostępu, więc współdzielenie tych samych dysków fizycznych z logami może stworzyć sztuczne wąskie gardło w wydajności systemu. Wpisy w dzienniku muszą zostać zapisane, aby transakcja mogła zostać zatwierdzona, więc losowe próby spowolnienia tego procesu (losowe operacje we / wy są znacznie wolniejsze niż sekwencyjne operacje we / wy logu) zmienią dziennik z sekwencyjnego w urządzenie o dostępie swobodnym. Stwarza to poważne wąskie gardło wydajności w zajętym systemie i należy go unikać. To samo dotyczy udostępniania obszarów tymczasowych woluminom dziennika.
Rola buforowania
Kontrolery SAN mają zwykle duże pamięci podręczne RAM, które do pewnego stopnia mogą absorbować ruch dostępu losowego. Jednak ze względu na integralność transakcyjną pożądane jest, aby zagwarantować, że zapisy z dysku z DBMS zostaną zakończone. Gdy kontroler jest ustawiony na używanie buforowania z zapisem wstecznym, brudne bloki są buforowane, a wywołanie We / Wy jest zgłaszane hostowi jako zakończone.
Może to rozwiązać wiele problemów z rywalizacją, ponieważ pamięć podręczna może wchłonąć wiele operacji we / wy, które w przeciwnym razie trafiłyby na dysk fizyczny. Może także zoptymalizować odczyty i zapisy parzystości dla RAID-5, co zmniejsza wpływ na wydajność woluminów RAID-5.
Są to cechy, które kształtują szkołę myślenia „Niech SAN sobie z tym poradzi”, choć ten pogląd ma pewne ograniczenia:
Buforowanie z zapisem w dalszym ciągu ma tryby awarii, które mogą spowodować utratę danych, a kontroler wykonał fleksję do DBMS, mówiąc, że bloki zostały zapisane na dysk, w rzeczywistości tak nie jest. Z tego powodu możesz nie chcieć używać buforowania zwrotnego dla aplikacji transakcyjnej, w szczególności do przechowywania danych o znaczeniu krytycznym lub finansowych, w przypadku których problemy z integralnością danych mogą mieć poważne konsekwencje dla firmy.
SQL Server (w szczególności) używa operacji we / wy w trybie, w którym flaga (zwana FUA lub Forced Update Access) wymusza zapis fizyczny na dysku przed powrotem wywołania. Microsoft ma program certyfikacji, a wielu dostawców SAN produkuje sprzęt, który spełnia te wymagania (podsumowano tutaj wymagania ). W takim przypadku żadna ilość pamięci podręcznej nie zoptymalizuje zapisów na dysku, co oznacza, że ruch w dzienniku zostanie zablokowany, jeśli siedzi on na zajętym współużytkowanym woluminie.
Jeśli aplikacja generuje duży ruch na dysku, jej zestaw roboczy może przepełnić pamięć podręczną, co również spowoduje problemy z rywalizacją o zapis.
Jeśli sieć SAN jest współdzielona z innymi aplikacjami (szczególnie na tym samym woluminie dysku), ruch z innych aplikacji może generować wąskie gardła dziennika.
Niektóre aplikacje (np. Hurtownie danych) generują duże skoki obciążenia przejściowego, co czyni je dość antyspołecznymi w sieciach SAN.
Nawet w przypadku dużych sieci SAN oddzielne woluminy dzienników są nadal zalecane. Możesz nie martwić się układem w lekko używanej aplikacji. W naprawdę dużych aplikacjach możesz nawet skorzystać z wielu kontrolerów SAN. Oracle publikuje szereg analiz przypadków dotyczących układu hurtowni danych, w których niektóre większe konfiguracje obejmują wiele kontrolerów.
Odpowiedzialność za wydajność tam, gdzie należy
W przypadku dużych woluminów lub w których wydajność może stanowić problem, zespół SAN ponosi odpowiedzialność za wydajność aplikacji. Jeśli będą ignorować zalecenia dotyczące konfiguracji, upewnij się, że kierownictwo jest tego świadome, a odpowiedzialność za wydajność systemu spoczywa w odpowiednim miejscu. W szczególności ustal akceptowalne wytyczne dla kluczowych statystyk wydajności DB, takie jak oczekiwania we / wy lub oczekiwania na zatrzask strony lub akceptowalne SLA aplikacji we / wy.
Pamiętaj, że ponoszenie odpowiedzialności za wyniki podzielone na wiele zespołów stwarza zachętę do wskazywania palcem i przekazywania złotówki drugiej drużynie. Jest to znany anty-wzorzec zarządzania i formuła dla problemów, które przeciągają się przez miesiące lub lata, ale nigdy nie zostały rozwiązane. Idealnie byłoby, gdyby jeden architekt posiadał uprawnienia do określania zmian konfiguracji aplikacji, bazy danych i SAN.
Przeprowadź również testy porównawcze systemu pod obciążeniem. Jeśli możesz to zorganizować, serwery z drugiej ręki i tablice z bezpośrednim podłączeniem można kupić dość tanio w serwisie eBay. Jeśli skonfigurujesz takie pole z jedną lub dwiema macierzami dyskowymi, możesz fregować się z konfiguracją dysku fizycznego i mierzyć wpływ na wydajność.
Jako przykład dokonałem porównania między aplikacją działającą na dużej sieci SAN (IBM Shark) a dwudrożną skrzynką z bezpośrednim podłączeniem tablicy U320. W tym przypadku sprzęt wart 3 000 funtów zakupiony w serwisie eBay był dwa razy lepszy od wysokiej klasy sieci SAN o wartości 1 miliona funtów - na hoście z mniej więcej taką samą konfiguracją procesora i pamięci.
Na podstawie tego szczególnego incydentu można argumentować, że umieszczenie czegoś takiego w pobliżu jest bardzo dobrym sposobem na zachowanie uczciwości administratorów SAN.