Optymalna konfiguracja dysku dla SQL Server 2008R2


19

Mam dość zajęty serwer bazy danych z programem SQL Server 2008 R2, który ma następującą konfigurację:

  • SATA RAID 1 (2 dyski) - OS / Programy
  • SAS RAID 10 (4 dyski) - pliki bazy danych SQL (dane i dzienniki)
  • SAS RAID 1 (2 dyski) - TempDB (dane i logi)

Zakładając, że nie mogę dodać dodatkowych dysków do tego serwera, czy w najlepszy sposób wykorzystałem dostępną konfigurację? Czy powinienem rozważyć inny schemat, w którym na przykład dzienniki są izolowane od plików danych?

Aktualizacja:

Dla tych, którzy poprosili o dalsze szczegóły dotyczące sprzętu:

  • Dyski SATA (używane do partycji OS / Program) to: WD 7200 RPM 3 Gb / s 3,5 cala SATA
  • Dyski SAS używane w innych macierzach to: Seagate 15K RPM 6 Gb / s 3,5 cala SAS
  • Używany kontroler RAID to: LSI 9260-8i SAS / SATA 6 Gb 8 port

Aktualizacja 2:

W oparciu o informacje zwrotne, jakie otrzymaliśmy, wygląda na to mam następujące żywotne opcje do wyboru - będę przyzna nagrodę dla kogoś, kto może mi powiedzieć, co jest prawdopodobne, aby być najlepszym w środowisku, że już przedstawione:

  1. Zostaw wszystko tak, jak jest - prawdopodobnie nie zrobię nic lepszego
  2. Przenieś moje 2 dyski SAS RAID 1 do mojej istniejącej macierzy RAID 10, aby w sumie składało się z 6 dysków
  3. Przenieś moje pliki dziennika na SAS RAID 1 i / lub przenieś TempDB (dane lub logi) z powrotem na RAID 10

Druga aktualizacja zawiera dokładnie te same pytania, co oryginalne pytanie, więc obowiązuje oryginalna odpowiedź. „… który prawdopodobnie będzie najlepszy w środowisku, które opisałem”… nie pokazałeś nam żadnej analizy obciążenia, tylko że jest „dość zajęty”, więc znowu ta sama odpowiedź ma zastosowanie .
Mark Storey-Smith

Dzięki wysokowydajnym NVMe i innym dyskom SSD na rynku macierz RAID nie jest już bardzo ważna z punktu widzenia najlepszych praktyk konfiguracji dysków serwera SQL . Pule dyskowe (miejsca do magazynowania) są sposobem na postęp. Należy jednak logicznie oddzielić woluminy, aby lepiej rozwiązywać problemy z wydajnością związane z dyskami.
Faces Of IT

Odpowiedzi:


14

Warianty tego pytania pojawiają się częściowo:

Od czasu do czasu odbywają się również walki pojedynków na temat „najlepszych praktyk” dotyczących separacji danych / logów.

Bez bardziej szczegółowej analizy tego, co robi ten serwer, obowiązują te same porady, co podane wcześniej.

  • RAID 1 dla systemu operacyjnego
  • RAID 10 (6 dysków) dla danych / logów / tempdb

Rzadko ma miejsce punkt podziału przy tak małej liczbie wrzecion. Pojedyncza tablica o większej pojemności procesorów IOP zazwyczaj pochłonie grudki i uderzenia obciążenia lepiej niż 2 mniejsze tablice.

Jednym z wariantów, który może być wart przetestowania, jest umieszczenie tempdb na dysku systemu operacyjnego. Zrób to tylko wtedy, gdy masz reprezentatywne obciążenie, które możesz wielokrotnie powtarzać, aby zapewnić rzetelne porównanie konfiguracji. Jeśli zdecydujesz się na takie ustawienie w produkcji, upewnij się, że wzrost tempdb jest ograniczony, abyś nie wykorzystał przypadkowo całego wolnego miejsca na dysku systemu operacyjnego.

Biorąc pod uwagę, że dyski OS są podstawkami 7200RPM, byłbym zaskoczony, gdyby tempdb na konfiguracji dysku OS przyniósł jakąkolwiek korzyść.


7

Wszystko zależy od obciążenia, ale przy zaledwie 6 dyskach ogranicza to twoje opcje. Jeśli obciążenie nie jest silnie zależne od tempdb w przypadku sortowania, tabel mieszania i izolacji migawek, lepiej byłoby użyć razem 6 dysków SAS w RAID 10. Jeśli jednak znasz lub masz takie dane, aby to udowodnić tempdb jest mocno wykorzystywany, więc powinieneś trzymać go oddzielnie, tak jak masz.


Dzięki za odpowiedź, zmiana konfiguracji zakresów nie jest (niestety) opcją, ponieważ ten serwer jest w produkcji. Jestem ciekawy przełączenia tempdb z powrotem na RAID 10 i umieszczenia wszystkich plików dziennika na RAID 1 - czy to jest inteligentna opcja?
DanP

2
Pamiętaj, że SQL Server musi fizycznie zapisywać wszystkie transakcje w dzienniku jako część zatwierdzenia, więc chcesz uzyskać najszybszą możliwą wydajność zapisu w konfiguracji. RAID 10 oferuje lepszą wydajność zapisu niż RAID 1, więc zostawiłbym dzienniki na szybszym wolumenie.
Patrick Keisler,

2

To bardzo zależy od tego, co rozumiesz przez „bardzo zajęty”: różne wzorce obciążenia (pisz ciężkie lub nie, operacje masowe wspólne lub nie, poziom równoczesnego dostępu, aby wymienić, ale trzy z wielu zmiennych) mogą mieć drastyczny wpływ na wykonanie dowolnego układu wrzeciona.

W przypadku trudnej do zapisu sytuacji oddzielanie dzienników od danych może mieć znaczącą różnicę, ponieważ każdy zapis wymaga aktualizacji zarówno dziennika, jak i plików danych, a zatem wymaga znacznej dodatkowej przewrócenia, jeśli oba zestawy plików znajdują się na tym samym zestawie wrzecion .

Bez dalszych odniesień do twojego obciążenia (i specyfikacji tych napędów i dowolnego kontrolera, który jest między nimi a maszyną) byłbym skłonny przejść na trzy woluminy: jeden dla programów OS + i tempdb (dane), jeden dla głównej bazy danych dane, a trzeci dla dzienników (zarówno bazy danych tempdb, jak i główne bazy danych).

Oczywiście, jeśli wszystkie obciążenia są bardzo lekkie w operacjach zapisu, nie powinieneś zbyt wiele czasu martwić się o oddzielenie danych i dzienników, ponieważ spowoduje to niewielką różnicę w wydajności i poświęcenie im całego woluminu byłoby dość marnotrawstwem dostępności przestrzeń.


Z pewnością opisałbym nasze środowisko jako „ciężkie zapisywanie” - w poniedziałek zaktualizuję moje pytanie bardziej szczegółowymi specyfikacjami sprzętowymi.
DanP

Masz pojęcie o liczbie dysków, które ma OP? Myślę raczej o Raid 1, który ma dla plików dziennika. To nie brzmi jak świetna opcja do zapisu, a pliki dziennika AFAIK nie są ograniczone do odczytu, ale zapisują.
Marian

Dodałem dodatkowe specyfikacje dotyczące sprzętu maszyny.
DanP

1
To nieporozumienie może być przyczyną wielu rantów separacji danych / logów, przepraszam, ale zamierzam to przywołać. „... ponieważ każdy zapis wymaga aktualizacji zarówno dziennika, jak i plików danych” - nie, nie robi tego. Zapisy na stronach danych występują w punkcie kontrolnym, a nie przy każdej modyfikacji.
Mark Storey-Smith

1
@DavidSpillett Prawda, zawsze będą przypadki, w których podział jest korzystny. Kluczem jest to, że przetestowałeś i sprawdziłeś, czy konfiguracja była korzystna dla tego konkretnego obciążenia.
Mark Storey-Smith

2

Rzeczywista odpowiedź zależy od twoich potrzeb, ale ogólnie „umieszczaj dane i loguj się na różnych tablicach” ma większe znaczenie niż „umieszczaj tempdb na własnej tablicy”.

Biorąc pod uwagę liczbę dostępnych dysków, moim punktem wyjścia będzie:

  1. Dwa dyski, RAID 1 - system operacyjny, pliki wykonywalne, plik stronicowania.
  2. Cztery dyski, RAID 5 - wszystkie pliki danych (alternatywnie RAID 1 + 0)
  3. Dwa dyski, RAID 1 - wszystkie pliki dziennika

Co należy zrobić, to użyć SQLIO do przetestowania wydajności różnych konfiguracji dysków.


To zdecydowanie reprezentuje „drugą stronę” porady, którą przeczytałem. Chciałbym, aby istniała ostateczna metoda ustalenia, która z opcji byłaby lepsza bez uciekania się do „wypróbowania” jej w środowisku produkcyjnym.
DanP

2
@ DanP Cóż, osobiście poszedłbym za radą Marka i wybrałbym RAID10 z resztą dysków (oprócz OS). Pliki dziennika wymagają intensywnego zapisu i wymagają lepszej wydajności niż oferuje RAID 1, o ile o tym myślę. Ale nie jestem ekspertem od sprzętu. Tylko moje 2 centy.
Marian

2
Powinienem wspomnieć, że moja opinia pochodzi tylko z doświadczeń z przeszłości (swego rodzaju) nieudanej migracji na lepszy serwer, ale z gorszą wydajnością. Nigdy nie testowaliśmy prawdziwego obciążenia tego nowego serwera, nigdy nie mieliśmy szansy, serwer nie był gotowy na czas. Okazuje się, że testowanie serwera PRZED migracją na produkcję powinno być OBOWIĄZKOWE. Przepraszam za nacisk. Tak więc moją mantrą dla wszystkich migracji / aktualizacji jest: TEST, TEST, TEST, ... jak najdziwniejszy test.
Marian

1
Nie jestem pewien, czy zacząć od RAID 5 czy SQLIOSIM ... przejdźmy do tego później, ponieważ ten pierwszy mówi sam za siebie. SQLIOSIM to narzędzie do testowania poprawności i obciążenia , nie jest narzędziem do testowania wydajności ani obciążenia. Nie ma absolutnie żadnego miejsca w porównywaniu wydajności config-X vs config-Y dla obciążenia-Z. Wszystko, co powiedziałoby ci, to jak dobrze config-X radzi sobie z config-Y w uruchomieniu SQLIOSIM. Jeśli chcesz porównać wydajność dla obciążenia Z, przetestuj obciążenie Z.
Mark Storey-Smith

1
@GreenstoneWalker „RAID1 jest szybszy do zapisu niż RAID1 + 0” to nonsens. Skąd ten pomysł?
Mark Storey-Smith

-1

W zależności od tego, do czego używasz DB (OLTP vs magazynowanie) twoja konfiguracja wygląda jak dobra ogólna konfiguracja. Gdybyś miał więcej dysków, miałbyś więcej opcji.

Możesz uzyskać lepszą wydajność, jeśli zmienisz dysk TempDB na RAID 0 (pasek). Zwiększa to ryzyko niepowodzenia, ale ponieważ TempDB buforuje tylko dane, nie możesz utracić danych. Dlatego większość ludzi uważa to za rozsądny kompromis. Po prostu zapasowy (lub zapasowy).

Jednej rzeczy, o której nie wspomniałeś, ale możesz spróbować (jeśli jeszcze tego nie zrobiłeś): Microsoft zaleca podzielenie TempDB na kilka plików (jeden na procesor). Oczywiście najlepiej jest, jeśli znajdują się one na osobnych dyskach, ale po prostu oddzielne pliki pomagają. http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx


4
Tempdb jest używany do wielu rzeczy, ale nie traktuj go jako bazy danych wysuwanej i umieść na RAID 0. Pamiętaj, że jeśli wolumin RAID 0 ulegnie awarii, SQL Server nie będzie mógł się uruchomić.
Patrick Keisler,

Rzeczywiście stworzyłem jeden temp db na rdzeń, jak sugerowano, ale dziękuję również za podniesienie tego punktu :)
DanP

1
Cóż, te sugestie nie są zbyt dobre i nie są odpowiednie dla każdego środowiska. Pierwszy jest wspomniany wcześniej przez @PatrickKeisler. Drugi to mit, który Paul Randal obalił jakiś czas temu. Artykuł jest następujący: Mit SQL Server DBA dziennie: (12/30) tempdb powinien zawsze mieć jeden plik danych na rdzeń procesora . Tak więc dokumentacja MS może być błędna, nie bierz jej na pamięć.
Marian

2
„ponieważ TempDB buforuje tylko dane, nie możesz utracić danych” ... i jestem pewien, że użytkownicy systemu docenią to, że podczas X godzin przestoju cierpią, gdy a) operatorzy kopią w piwnicy, aby dysk zastępczy lub b) DBA próbuje wyjaśnić działowi pomocy technicznej, jak przenieść tempdb ze swojego telefonu komórkowego.
Mark Storey-Smith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.