Czy powinienem uruchomić moją bazę danych z konfiguracji RAID 5?

13

Słyszałem, że wydajność zapisu w RAID 5 może być czasami przerażająca. Chociaż chcę nadmiarowości, którą zapewnia, nie chcę poświęcać czasów wstawiania / aktualizacji bazy danych.

Czy powinienem się tym martwić, a jeśli tak, to jaka byłaby rekomendacja, aby uzyskać redundancję przy dobrej wydajności zapisu?

Scott Saad
źródło
1
Który DB? Oracle + RAID 5 było kiedyś nie-nie. Nie jestem pewien, czy nadal tak jest.
cagcowboy
W tym konkretnym przykładzie baza danych działa na MySql i MSSQL.
Scott Saad
Nieco bardziej szczegółowa kwestia w odniesieniu do aplikacji (mieszanie odczytu / zapisu DB, wymagania dotyczące czasu przestoju i czasu odzyskiwania) mogą uzyskać bardziej odpowiednią odpowiedź; te rzeczy mogą mieć znaczenie w najlepszym rozwiązaniu.
Jay Stevens

Odpowiedzi:

23

RAID 10 jest zwykle zalecany, ponieważ operacje we / wy są tak losowe. Oto przykład. Obliczenia są nieco uproszczone, ale dość reprezentatywne.

Załóżmy, że masz macierz 6 dysków, a twoje dyski mogą wykonywać 100 operacji we / wy na sekundę (IOPS). Jeśli masz 100% odczytów, wszystkie sześć dysków będzie używanych, a będziesz mieć około 600 IOPS zarówno dla RAID 10, jak i RAID 5.

Najgorszym scenariuszem jest zapis w 100%. W tym scenariuszu wydajność RAID 10 zostanie zmniejszona o połowę (ponieważ każdy zapis trafia na dwa dyski), więc otrzyma 300 IOPS. RAID-5 przekształci każdy zapis na dwa odczyty, a następnie dwa zapisy, dzięki czemu uzyska 1/4 wydajności lub około 150 IOPS. To niezły hit.

Rzeczywisty wzorzec odczytu / zapisu znajdzie się gdzieś pomiędzy tymi dwoma skrajnościami, ale dlatego RAID 10 jest zwykle zalecany do baz danych.

Jeśli jednak nie masz zajętego serwera bazy danych, możesz nawet użyć RAID-6. Często to robię, jeśli wiem, że baza danych nie będzie wąskim gardłem, ponieważ zapewnia znacznie większe bezpieczeństwo niż RAID 10 lub RAID 5.

TorgoGuy
źródło
22

Transakcyjne bazy danych

RAID-5 zapisuje się stosunkowo wolno, ponieważ kontroler musi załadować wystarczającą ilość danych, aby ponownie obliczyć parzystość zapisu. Operacje zapisu pociągną za sobą co najmniej cztery operacje dyskowe:

  • Odczyt w bloku parzystości

  • Odczyt w starym bloku (zakładając, że nie jest on już w pamięci podręcznej) w celu XOR wartości z blokiem parzystości.

  • Zapis nowego bloku parzystości (stary blok parzystości XOR stary blok danych XOR nowy blok danych)

  • Zapis nowego bloku danych.

Jeśli system nie korzysta z buforowania z zapisem wstecznym, oznacza to, że wszystkie te operacje znajdują się na ścieżce krytycznej dla zakończenia operacji we / wy. Często dzieje się tak w przypadku zapisów do baz danych - w rzeczywistości Microsoft (na przykład) ma program certyfikacji urządzeń SAN do użytku z serwerem SQL, który wymaga od dostawców zagwarantowania takiego zachowania. Czasami starszy sprzęt RAID-5 nie korzystał z tej optymalizacji i musiał ponownie obliczyć parzystość z całego paska.

RAID-10 ma kopię lustrzaną dla każdego dysku i nie musi czytać dodatkowych danych, aby obliczyć parzystość. Oznacza to, że zapisy wymagają znacznie mniej fizycznych operacji we / wy.

RAID-50 znajduje się gdzieś pośrodku, z woluminem podzielonym na wiele woluminów RAID-5, które z kolei są rozłożone. Na macierzy RAID-50 wykonanej z grup rozłożonych w schemacie 3 + 1 zapis generuje co najwyżej trzy dodatkowe żądania We / Wy dysku. Jeśli czujesz się tak skłonny, możesz postrzegać RAID-5 i RAID-10 jako specjalne przypadki RAID-50. RAID-50 służy głównie do udostępniania dużych woluminów na wielu dyskach fizycznych

Istnieją również inne schematy parzystości, takie jak RAID-6 (schemat parzystości z dwoma redundantnymi dyskami na zestaw). Nowoczesne dyski są wystarczająco duże, aby ponowne zestawienie tablicy mogło zająć dość dużo czasu - wystarczająco długo, aby ryzyko awarii drugiego dysku podczas odbudowa jest dość znacząca. RAID-6 zmniejsza to ryzyko, mając drugi dysk parzystości, wymagający trzech awarii dysku, aby spowodować utratę danych. Podobną sztuczkę jak schematy RAID-50 można wykorzystać do tworzenia macierzy RAID-60.

Wreszcie, pojedyncza para kopii lustrzanych (znana jako RAID-1) może zapewnić nadmiarowość i wystarczająco dobrą wydajność do niektórych zadań. W szczególności prawdopodobnie przekonasz się, że RAID-1 zapewnia wystarczającą przepustowość na dość duży ruch w dzienniku bazy danych. Więcej na ten temat poniżej.

Jeśli masz duże obciążenie zapisu, prawdopodobnie uzyskasz wzrost wydajności z woluminu RAID-10. Może to być wygrana, ponieważ prawdopodobnie możesz uzyskać wymaganą przepustowość z mniejszej liczby dysków fizycznych, zakładając, że dyski mają wystarczającą ilość miejsca. Niektóre elementy, takie jak dzienniki lub obszary tymczasowe na serwerze bazy danych, powinny znajdować się na woluminach RAID-1 lub RAID-10, ponieważ powodują one duży ruch zapisu.

Kłody

Woluminy dziennika charakteryzują się głównie sekwencyjnym wzorcem dostępu do danych i są zasadniczo buforem pierścieniowym składającym się z poleceń w stylu „zapisz te dane do tego bloku”. Są one zapisywane jako producent przez podstawowy silnik DBMS i przetwarzane jako konumer przez funkcję czytnika dziennika. Pojedyncza para kopii lustrzanych będzie obsługiwać całkiem duży ruch w dzienniku.

Systemy i serwery plików wymagające dużej ilości odczytu

W systemie wymagającym intensywnego odczytu, takim jak hurtownia danych, możesz użyć jednego lub więcej woluminów RAID-5. Na serwerze plików dostęp do dysku będzie w dużej mierze wykonywany dla całego pliku, więc zapisy prawdopodobnie wypiszą większość bloków, które tworzą blok parzystości. W takim przypadku kara za wydajność dla RAID-5 będzie mniejsza.

W przeszłości oszczędności na dysku mogły być znaczące, ale teraz jest to mniej prawdopodobne.

Zapisywanie w pamięci podręcznej i RAID-5

Na SAN lub wewnętrznym kontrolerze RAID z pamięcią podręczną zasilaną bateryjnie możesz włączyć buforowanie „Write-back”. Ta pamięć podręczna zapisuje i zwraca kontrolę do aplikacji. We / wy jest zgłaszane przez sterownik jako zakończone. Jednak niekoniecznie natychmiast zapisuje dane na dysk. Ta funkcja pozwala znacznie zoptymalizować operacje odczytu / zapisu parzystości RAID-5 i może złagodzić spadek wydajności zapisu dla woluminów RAID-5x.

Nadal jednak wiąże się to z niewielkim ryzykiem problemów z integralnością danych. Systemowi hostowi powiedziano, że ten zapis został zakończony, gdy tak nie jest. Możliwe jest, że awaria sprzętu spowoduje powstanie niespójności danych między (powiedzmy) woluminami dziennika i danych na serwerze bazy danych. Z tego powodu buforowanie z zapisem zwrotnym nie jest zalecane w systemach transakcyjnych, chociaż może to być wzrost wydajności dla czegoś takiego jak proces ETL.

streszczenie

Dysk przestrzeń jest tak tania, że systemy transakcyjne powinny prawdopodobnie użyć RAID-1 lub RAID-10 tomów dzienników i RAID-10 dla ilości danych. Rozmiar fizycznego dysku prawdopodobnie będzie znacznie większy niż baza danych, a RAID-10 pozwoli na większą przepustowość zapisu dla tej samej liczby dysków, potencjalnie zmniejszając liczbę woluminów dyskowych potrzebnych do obsługi systemu.

Na czymś takim jak hurtownia danych nadal możesz przeżuwać przestrzeń za pomocą dużych, mocno indeksowanych tabel faktów, aby uzyskać niewielką wygraną cenową dzięki wolumenom danych RAID-5 lub RAID-50. Jednak dzienniki i tempdb powinny być nadal umieszczane na woluminie RAID-10, ponieważ prawdopodobnie zapewnią dużo pracy podczas przetwarzania ETL. Jednak oszczędność kosztów na dysku może być raczej niewielka.

ConcernedOfTunbridgeWells
źródło
Pamięć podręczna z zapisem: jeśli kupujesz kontroler RAID z pamięcią podręczną „z podtrzymaniem bateryjnym”, pamiętaj, że bateria nie wydaje się być dołączona. Upewnij się, że Twój dostawca ją uwzględni.
David Hicks
Niektórzy tak, inni nie. Mam całkiem sporo Adapteców 2200, które nie były dostarczane z bateriami. Niektóre są standardowo dostarczane z nimi.
ConcernedOfTunbridgeWells
1
Masz błąd w swojej odpowiedzi. Zdajesz nie trzeba czytać każdy napęd do ponownego obliczenia parytetu. Zapis staje się 2 odczytami i 2 zapisami. Pozostałe 12 dysków w przykładowej macierzy 14 dysków nie zostanie dotknięte przez RAID5.
TorgoGuy
Tak naprawdę uważam, że ten mężczyzna ma rację. Możesz odczytać i XOR parzystość ze starą wartością bloku i ponownie z nową wartością bloku. Nigdy nie widziałem tego opisanego wcześniej, ale zadziałałoby.
ConcernedOfTunbridgeWells
3

Zależy to w dużej mierze od twojej tolerancji na błędy / ryzyko. RAID5 ma wiele problemów . Mój serwer DB ma obecnie dwa dublowane dyski, a jeśli miałbym to zwiększyć, wybrałbym coś o większej parzystości, prawdopodobnie RAID6 lub RAID10.

Ponadto, jeśli twoja aplikacja ma krytyczny czas działania, prawdopodobnie zaleciłbym zamiast tego dwa serwery bazy danych z replikacją, master-master lub hot spare lub cokolwiek innego. RAID pomaga tylko zapobiegać awariom dysków, ale na serwerze jest wiele innych rzeczy, które mogą pójść nie tak :)

mikl
źródło
3

Zależy od tego, ile piszesz.

Jeśli jest to dość lekka „aplikacja internetowa”, prawdopodobnie nie zauważysz spadku wydajności RAID5.

Jeśli budujesz hurtownię danych o pojemności wielu GB z dużymi ETL, wówczas bufor zapisu na RAID 5 szybko się przepełni i przejdziesz bezpośrednio do „niskiej wydajności zapisu” RAID 5.

Każdy zapis RAID5 spowoduje co najmniej 3 zapisy (plus obliczenie CRC). Po buforowaniu jest to w porządku i szybkie (małe krótkie impulsy aktywności - aktualizacja pojedynczych rekordów i wstawianie). Jeśli jest to trwały zapis (duża zbiorcza wstawka / aktualizacje), zostanie to zauważone.

To równowaga między wydajnością a przestrzenią. RAID 10 (lustro pasiastych dysków) zapewnia zarówno wydajność, jak i elastyczność, ale zmniejsza pojemność o 50%.

RAID5 zapewnia większą pojemność, dobrą wydajność odczytu, ale słabą (dużą) wydajność zapisu.

Chłopak
źródło
2

RAID 1, to moja ostatnia odpowiedź

Powody:

para lustrzana zapewnia odpowiednią redundancję dla uszkodzonych dysków, a RAID nadal działa na ostatnim dysku.

para lustrzana daje większą wydajność I / O dla odczytów, jeśli umieścisz swoje dane i indeksy ostrożnie ... [wskazówka: Użyj osobnych woluminów dla danych i ich indeksów]. Możesz uzyskać jeszcze większą wydajność, dupleksując kontrolery.

ninegrid
źródło
Dlaczego nie RAID 1 + 0?
Brian Knoblauch
2

Dla kilku dobrych przewodników „dlaczego nie” to zawsze było bardzo popularne wśród Oracle DBA, z którymi współpracowałem ...

Bitwa przeciwko każdej Raid Five - http://www.miracleas.com/BAARF/

Mark Regensberg
źródło
2

Krótka odpowiedź: nie.

Długa odpowiedź: chyba że masz bardzo małą bazę danych lub bardzo minimalne wymagania, nie. Pobieranie danych jest w dużej mierze zależne od operacji we / wy dysku na sekundę, a nakładanie pasków pochłonie dostęp do dysku w miarę upływu czasu, szczególnie w przypadku długich zapytań. Większość baz danych działa w konfiguracji RAID 10 lub z określonymi woluminami zawierającymi partycje danych. Tak, RAID 10 będzie Cię kosztować w zapisach, ale wydajność odczytu (przy odpowiedniej konfiguracji) pójdzie w górę .

Avery Payne
źródło
1

jakie byłoby zalecenie, aby uzyskać redundancję przy dobrej wydajności zapisu?

Duża pamięć podręczna zapisu. Zwiększ pamięć RAM w sprzętowym kontrolerze RAID lub pamięć RAM dostępną w oprogramowaniu RAID (np. W systemie Linux MDADM zwiększ pamięć RAM systemu, balony MDADM, aby w przeciwnym razie użyć nieużywanej pamięci RAM jako pamięci podręcznej zapisu). Ta rada odnosi się do podanych wartości „dużego” - jeśli będziesz często (5% czasu?) Zapisywać dane z szybkością wystarczająco szybką, aby wypełnić pamięć podręczną zapisu, bez względu na to, jak duża jest, to nie będzie to miało większego znaczenia.

David Hicks
źródło
1

Naprawdę chodzi o oddzielenie plików danych, plików dziennika od pliku systemu operacyjnego. Dzienniki zapisują sekwencyjnie Dane powodują wiele losowych odczytów i niektórych losowych zapisów

Budując konfiguracje RAID obsługujące te cechy znacznie poprawiasz wydajność

Raid 1 - mirroring jest świetny dla plików logów Raid 10 jest dobry dla twoich plików danych. Warto również spojrzeć na oddzielenie TempbDB i kopii zapasowych na osobne dyski. Dodawanie aplikacjami jest innym sposobem na zwiększenie wydajności. Jeśli chodzi o sieci SAN, nie jest to takie jasne. Zależy to od tego, czy budujesz określone konfiguracje rajdowe dla każdej jednostki LUN, czy zależy od liczby wrzecion.

CPU_BUSY
źródło
0

W duchu ostatniego artykułu na blogu StackOverflow mówiącego, że nie powinniśmy ponownie przedstawiać odpowiedzi już dostępnych w Internecie, wskazuję na to

RAID-5 nie jest wyjątkowy pod względem zapewnianej nadmiarowości, robi to, zużywając mniej dodatkowych dysków niż niektóre alternatywy. Możesz wybrać coś innego z równą lub lepszą redundancją i lepszą wydajnością zapisu

Archetypalny Paweł
źródło
0

Uruchomienie bazy danych z RAID5 jest zwykle błędem. Widziałem to tylko w dwóch przypadkach - dobrze zaprojektowane bazy danych, które wymagały intensywnego odczytu z niewielką liczbą zapisów, oraz bazy danych, w których „marnowanie miejsca” z powodu RAID5 nie było politycznie wykonalne.

RAID5 zniszczy wydajność transakcyjną.

Ponadto, jeśli rozważasz RAID5, sprawdź, czy możesz uzyskać RAID6 do pracy. Niezawodność teoretyczna jest o wiele lepsza, chociaż niezawodność w świecie rzeczywistym jest często gorsza z powodu niedojrzałych implementacji.

Carlito
źródło