Kiedy indeksy nieklastrowane powinny być przechowywane w osobnych aplikacjach?

16

Słyszałem, że przechowywanie indeksów na innej grupie plików i dysku zwiększa wydajność w bazie danych, ponieważ dysk nie musi przechodzić między indeksem a danymi, do których odwołuje się indeks. Słyszałem również, że to mit.

Kiedy wskazane jest przechowywanie indeksów nieklastrowanych na osobnej grupie plików i dysku? Jakie dowody perfmon / profilera doprowadziłyby mnie do takiego wniosku? Czy sprzęt odgrywa rolę w podejmowaniu decyzji (czy RAID / SAN jest używany na jednym dysku)?

Michael Hedgpeth
źródło

Odpowiedzi:

10

Najwolniejszą częścią systemu DB są napędy dyskowe. Wyeliminowanie wąskich gardeł na poziomie dysku poprawi wydajność. Gdy dane są wyszukiwane i używany jest indeks, indeks jest najpierw wyszukiwany, a następnie pobierane są odpowiednie dane. Jeśli zarówno indeks, jak i dane znajdują się na tych samych dyskach, wówczas występuje spór. Natomiast jeśli dane znajdowałyby się na innym (fizycznym) dysku, następuje szybsze operacje wejścia / wyjścia, co zwiększa wydajność. Należy przede wszystkim zauważyć, że dane lub indeks znajdują się na osobnych dyskach fizycznych lub jednostkach LUN.

Skorzystałbyś z takiego scenariusza, jeśli chcesz uzyskać lepszą wydajność systemu, pod warunkiem, że masz dyski. Na wasze perfmon liczniki można użyć Physical Disk – Avg. Disk sec/Read, Physical Disk – Avg. Disk sec/Write, Physical Disk – Disk Reads/sec, Physical Disk – Disk Writes/secaby mieć przed i po porównaniu zmian.

StanleyJohns
źródło
1
Jeśli zamiast dwóch osobnych dysków fizycznych, jeśli w jakiś sposób zarządzam indeksami i danymi na dwóch osobnych dyskach, np. D: \ i E: \ obecnych na tym samym dysku twardym, to nadal da mi to wzrost wydajności, jeśli wezmę pod uwagę spór związany z czytaniem miejsce na dysku twardym?
RBT,
5

Z pewnością prawdą jest, że rozkładanie jednoczesnych wejść / wyjść między różnymi dyskami zwiększy wydajność - to nie mit. Mitem jest, że dwukrotne wykonanie tej czynności poprawi wydajność ponownie.

Jeśli to SAME , podzielenie tablicy na dwie partycje i umieszczenie indeksów na jednej, a tabel na drugiej, to strata czasu.

Jack mówi, że spróbuj topanswers.xyz
źródło
Zgadzam się, ale nie wierzę, że o to prosił.
NTDLS
Zadane pytanie: „Czy sprzęt odgrywa rolę w podejmowaniu decyzji (czy RAID / SAN jest używany na jednym dysku)?”. Moja odpowiedź w zasadzie brzmi: jeśli macie RAID, nie przejmujcie się dzieleniem indeksów i tabel. Co nie znaczy, że zdecydowanie powinieneś, nawet jeśli nie masz RAID ...
Jack mówi, że spróbuj topanswers.xyz
5

Oddzielanie indeksów od danych do oddzielnych aplikacjami = poprawa wydajności jest wysoce dyskusyjna. Poprawa wydajności „może” nastąpić, jeśli masz podstawowy sprzęt do jej obsługi, ale sam fakt, że rozdzielenie ich na różne grupy plików nie daje ci lepszego efektu. I z tego powodu NIE jest łatwo zmierzyć podbicie perf.

Ref: http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA-Monkey.aspx

Najpierw powinieneś zadać pytanie. Dlaczego musisz to zrobić?

  1. Czy chcesz poprawić wydajność tworzenia kopii zapasowych, NIE uwzględniając indeksów?
  2. Czy chcesz poprawić wydajność odczytu i zapisu w tych indeksach?
  3. Czy robisz to w celu lepszego zarządzania umieszczaniem podstawowych obiektów?
  4. Czy masz duże ilości danych, które mają różne potrzeby w zakresie wydajności?
  5. Czy chcesz używać dysków SSD do indeksów nieklastrowanych w celu poprawy wydajności itp ...

Spojrzałem na to zadanie, aby wesprzeć potrzebę # 5 z powyższej listy i wydaje mi się to dobrą propozycją, chociaż nie podjęliśmy jeszcze tego działania.

Pamiętaj, że ta decyzja NIE jest łatwa do podjęcia i musisz dowiedzieć się, co próbujesz zrobić, i upewnić się, że masz sprzęt do obsługi. Nie wprowadzaj takich zmian, chyba że dobrze przetestowałeś i zauważysz znaczny wzrost wydajności, w przeciwnym razie równie dobrze możesz porzucić ten pomysł. NIE jest tego warte, jeśli spodziewasz się udoskonalenia, po prostu dzieląc indeksy na osobne aplikacje.

Sankar Reddy
źródło
Podoba mi się artykuł Dana :-). Chyba wszyscy zdarza się, że importujemy stare korporacyjne standardy i w pewnym momencie kwestionujemy ich przydatność.
Marian
1

Opowiem ci moje osobiste doświadczenia związane z tym przedmiotem. Indeksy nieklastrowane powinny być przechowywane w osobnej grupie plików, gdy bieżący dysk nie jest wystarczająco duży, aby pomieścić potrzebną przestrzeń :-). Możesz się z tego śmiać ... ale tak się dzieje.

Dlatego rozwiązaniem awaryjnym dla nas, gdy mieliśmy pozostać bez wolnego miejsca na dysku z danymi, było stworzenie ładnego skryptu do odtworzenia wszystkich indeksów nieklastrowanych online na nowej grupie plików na dysku z wolnym miejscem. Można by pomyśleć, że kupowanie nowego miejsca jest łatwe i szybkie ... ale tak naprawdę nie jest tak.

Jeśli chodzi o wydajność, nie widzieliśmy nic niezwykłego po przeprowadzce. Ale to duże pudełko do przechowywania SAN, w którym wszystko jest trzymane razem :-).

Marian
źródło
1

Ogólnie; podział danych i indeksów na osobne dyski o podobnej wydajności mogą zwiększyć wydajność znacznych operacji zapisu do tej tabeli lub dużych operacji odczytu wykorzystujących ten indeks. Metodologia podobna do niektórych innych operacji we / wy, takich jak tabela partycjonowana na wielu dyskach fizycznych.

Jest to jednak w dużej mierze zależne od pamięci . Na przykład; jeśli masz serwer z ładnym Fushion ioDrive (lub czymś podobnym), a także masz pojedyncze wirujące dyski. Korzystniejsze może być przechowywanie wszystkiego w ioDrive (chyba że przestrzeń jest ograniczona). Należy również wziąć pod uwagę inne rzeczy - konfigurację RAID, konfigurację pamięci sieciowej.

Wykonaj pewne oznaczenia na serwerze testowym z podobnym sprzętem lub (tylko jeśli serwer pomocniczy nie jest opcją) w godzinach poza szczytem z danymi tymczasowymi. Link DBA-Monkey Sankara powyżej jest dobrym jedzeniem do namysłu.

GP Van Eron
źródło