SQL Server 2005/2008 - wiele plików / aplikacjami - ile? Dlaczego?


11

Jestem programistą w sercu - ale od czasu do czasu klient nie ma przyzwoitej DBA, aby poradzić sobie z tymi problemami, więc jestem wezwany do podjęcia decyzji ...

Jakie są twoje strategie / najlepsze praktyki, jeśli chodzi o obsługę bazy danych SQL Server o rozsądnej wielkości (coś większego niż Northwind lub AdventureWorks; około 2-4 GB danych plus indeksy itp.) - Czy używasz wielu plików / aplikacjami?

Jeśli tak: ile? I dlaczego?

Jakie są twoje kryteria, aby zdecydować, kiedy odejść od podejścia „jedna grupa plików dla wszystkiego”:

* database size?
* database complexity?
* availability / reliability requirements?
* what else?

Jeśli korzystasz z wielu grup plików, z ilu korzystasz? Jeden dla danych, jeden dla indeksu, jeden dla dziennika? Kilka (ile) danych? Jakie są powody twojego wyboru - dlaczego używasz dokładnie tej liczby grup plików :-)

Dzięki za wszelkie wskazówki, wskazówki, przemyślenia!

Pozdrawiam, Marc

Odpowiedzi:


16

Podstawową zasadą jest rozdzielanie plików na różne woluminy, aby uniknąć rywalizacji, jednak wzrost wydajności jest bardzo różny w zależności od podsystemu we / wy i obciążenia. Na przykład wiele plików na jednym fizycznym wrzecionie będzie zużywało się pod względem wydajności, ale ten sam układ z woluminem na SAN LUN z kilkoma setkami dysków z macierzy RAID 10 może być w porządku. Liczniki długości kolejek dyskowych są Twoim przyjacielem jako najprostszy sposób na stwierdzenie, czy masz wąskie gardło we / wy.

Patrzysz na wzorce we / wy w bazach danych - tylko do odczytu, głównie do odczytu, do odczytu i zapisu, głównie do zapisu, tylko do zapisu - i opierając się na tym. Musisz także wybrać odpowiedni poziom RAID i upewnić się, że przesunięcia partycji dysku, rozmiar paska RAID i rozmiar jednostki alokacji NTFS są ustawione poprawnie. Niektórzy ludzie lubią dzielić indeksy nieklastrowane na osobną grupę plików, ale wzrost wydajności tutaj różni się, tak jak wyjaśniłem powyżej.

Oprócz wydajności powinieneś wziąć pod uwagę możliwości zarządzania i odzyskiwania. Posiadanie jednego, monolitycznego pliku danych dla bazy danych 100 GB oznacza, że ​​jednostką przywracania jest ten plik. Podział na 4 grupy plików 25 GB oznacza, że ​​możesz użyć częściowej dostępności bazy danych i częściowego przywracania, aby przywrócić tylko jedną grupę plików w przypadku jej uszkodzenia. Dzieląc tabele i indeksy na wiele grup plików, można również ograniczyć, które części bazy danych podlegają operacjom konserwacyjnym (np. Usuwanie fragmentacji indeksów).

Tempdb to wyjątkowy przypadek i skieruję cię do mojego bloga, który wyjaśnia wszystko o tym, dlaczego i jak podzielić tempdb - jest wiele nieporozumień.

Nie udzielając tutaj rekomendacji „szerokiej uogólnienia”, wskażę ci kilka oficjalnych artykułów i postów na blogu, które możesz przeczytać:

Mam nadzieję, że to ci pomoże!


+1 dzięki bardzo, Paul - świetny post, świetne linki - doskonałe
marc_s

Świetna odpowiedź Paul -> Próbowałem znaleźć niektóre wcześniej zadawane pytania dotyczące SqlServer i konstrukcji dysku twardego (np. TempDB na Bus1_Disk1, My_DB na Bus2_Disk1 itp.) .. Czas na czytanie ....
Pure.Krome

4

Decyzję o podzieleniu bazy danych na różne grupy plików należy podjąć po przeanalizowaniu bieżącej wielkości i przyszłego wzrostu tabel. Moim zdaniem, chyba że masz dużą bazę danych lub tabele z milionami wierszy, powinieneś dokładnie rozważyć zalety i wady, ponieważ możesz w końcu stworzyć więcej problemów z wydajnością niż naprawisz.

Istnieje kilka scenariuszy, które mogą być interesujące pod pewnymi warunkami:

  • 2 aplikacjami: dane i indeks
  • 3 aplikacjami: tabele tylko do odczytu, tabele do odczytu i zapisu, indeks
  • wiele aplikacjami: tylko do odczytu, do odczytu i zapisu, indeks, tablica kluczy 1, tablica kluczy 2, ...

Musisz przeanalizować swoje środowisko, aby zdecydować, czy aplikacjami pomocnymi w zakresie wzrostu, użycia i wydajności programu SQL Server.

Niektóre kluczowe wskaźniki, aby przejść do wielu aplikacjami (z tego artykułu ):

  • Gdy kolejkowanie dysków powoduje problemy z aplikacją i doświadczeniem użytkownika
    • W takim przypadku rozważ wykorzystanie dodatkowych dysków w nowych aplikacjach zawierających tabele intensywnych operacji we / wy
  • Gdy poszczególne tabele stanowią 10% lub więcej bazy danych
    • W takim przypadku rozważ przeniesienie szczególnie dużych tabel do oddzielnych aplikacjami na oddzielnych dyskach
    • W zależności od wielkości tabeli proporcjonalnie do reszty tabel, należy rozważyć utworzenie grupy plików dla poszczególnych tabel
  • Gdy indeks nieklastrowany i przestrzeń danych są równe w dużych tabelach
    • W takim przypadku rozważ podzielenie danych i indeksu klastrowego z indeksów nieklastrowych
  • Gdy w bazie danych istnieje prawie taki sam procent danych tylko do odczytu i danych do odczytu i zapisu
    • W takim przypadku rozważ podzielenie danych tylko do odczytu w oddzielnej grupie plików jako dane do odczytu i zapisu
  • Gdy nie ma wystarczającej ilości czasu na przeprowadzenie konserwacji bazy danych
    • W takim przypadku rozważ podzielenie dużych tabel na osobne aplikacje na różnych dyskach i wykonaj konserwację równolegle
  • Kiedy firma lub aplikacja ulegnie znacznej zmianie, a dane będą rosły w znacznie szybszym tempie
    • W takim przypadku rozważ współpracę z użytkownikami, aby zrozumieć potencjalny wzrost
  • Gdy zarchiwizowane dane znajdują się w tej samej bazie danych, co dane produkcyjne
    • W takim przypadku rozważ oddzielne grupy plików lub jedną lub więcej technik z tej wskazówki - Archiwizowanie danych w SQL Server

Jeśli okaże się, że aplikacjami może poprawić wydajność bazy danych, napisz kod i przetestuj proces w środowisku pomostowym przed wdrożeniem zmian na serwerach produkcyjnych. Przygotuj kilka pomiarów przed wprowadzeniem zmian i porównaj je przed / po. Ponieważ procesy te mogą być bardzo pracochłonne i czasochłonne, wykonaj te procedury w okresie konserwacji.

Nie zapomnij, tworząc nowe obiekty (tabele i indeksy), upewnij się, że obiekty są tworzone we właściwej grupie plików, aby zapewnić oczekiwaną wydajność i okresowo sprawdzać, czy obiekty bazy danych znajdują się we właściwych aplikacjach i czy są poprawne w razie potrzeby.


+1 doskonały post - dzięki za podpowiedzi i linki!
marc_s
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.