Partycjonowanie na jednej grupie plików

10

Mam bardzo duże tabele w mojej bazie danych, ale znaczna część tych danych jest „stara”.

Ze względu na okoliczności, na które nie mam wpływu, nie mogę usunąć tych „starych” danych. Drugim ograniczeniem jest to, że nie mogę modyfikować bazy danych, co oznacza dodawanie do niej grup plików. W obecnej sytuacji wszystko znajduje się w PRIMARYgrupie plików.

Myślałem o podzieleniu tych tabel na kilka partycji, takich jak „nowa”, „stara”, „zarchiwizowana” i podobne. Mam kolumnę „status”, której chciałbym użyć do tego celu.

Biorąc pod uwagę opisany scenariusz i ograniczenia, zastanawiałem się, czy partycjonowanie ma tu sens. Innymi słowy, jeśli moja tabela jest podzielona na partycje w ten sposób, ale wszystkie partycje znajdują się w tej samej grupie plików, SQL Server będzie wystarczająco inteligentny, aby znaleźć ten specjalny obszar w pliku źródłowym, w którym znajdują się moje „nowe” dane, i nie dotykać obszar ze „starymi” danymi?

Innymi słowy, jeśli, powiedzmy, 80% moich danych jest „starych”. Czy SQL Server ma mechanizm pozwalający uniknąć dostępu do 100% bazowych plików i dostęp tylko do 20%, który zawiera „nowe” dane (zakładając, oczywiście, że kolumnę partycjonowania określam w WHEREklauzuli zapytań).

Myślę, że aby na to odpowiedzieć, trzeba zrozumieć, w jaki sposób partycjonowanie jest realizowane wewnętrznie. Doceniam wszelkie wskazówki.

Paul White 9
źródło

Odpowiedzi:

6

Istnieją dwie zalety partycjonowania tabeli w tej samej grupie plików:

  1. Umożliwiając stopniowe przebudowywanie części dużego indeksu, co pozwala na bardziej wydajną konserwację. Przejrzyj, aby ALTER INDEX [foo] REBUILD PARTITION=nuzyskać więcej informacji.
  2. Wykorzystanie eliminacji partycji i (ewentualnie) blokowania poziomu partycji w celu usprawnienia obsługi zapytań. Dyskutuję o tym na moim blogu .

Podczas partycjonowania należy pamiętać o kilku kwestiach.

  • Jeśli tabela ma indeks klastrowany (i naprawdę powinien), klucz do partycjonowania musi być częścią indeksu klastrowego.
  • Aby uniknąć problemów z wydajnością, należy wyrównać partycje. Oznacza to, że wszystkie Twoje indeksy powinny zawierać klucz partycji, czy to jako część, czy jako część samego indeksu.
  • Przebudowy indeksu dla partycji są offline w aktualnych wersjach SQL Server (2005-2012). Jeśli partycje są zbyt duże, a przebudowywanie według partycji może prowadzić do problemów z blokowaniem.

Zalecam przeprowadzenie dokładnych badań partycjonowania przed jego wdrożeniem. Kendra Little ma doskonałą listę zasobów, od których możesz zacząć.

Mike Fal
źródło
Jeśli mam podzielony na partycje indeks klastrowany, czy wszystkie indeksy nieklastrowane nie zawierają już kolumny partycjonującej jako lokalizatora wierszy?
Zikato,
0

Odpowiedź brzmi tak". Ma mechanizm dla każdego zapytania filtrującego dane wejściowe na podstawie logiki użytej do zdefiniowania partycji.

Musisz mieć jednak odpowiedni filtr, inaczej cała partycja zostanie przeskanowana. Zazwyczaj wymagałoby to posiadania filtrów daty (w twoim przypadku) do wyboru partycji.

Jednym ze sposobów wymuszenia tego jest posiadanie widoków, które mają dostęp tylko do jednej partycji, z odpowiednią logiką w widoku.

Gordon Linoff
źródło
Zastanawiam się, jaki byłby wzrost wydajności partycjonowania na tym samym dysku fizycznym ..
sotn