Aby zmaksymalizować wydajność DB, które polecenia należy uruchamiać po załadowaniu dużej ilości danych do SQL Server 2008 za pośrednictwem SSIS

11

Napisałem pakiet SSIS, aby załadować dane testowe do pustej bazy danych. Niektóre tabele są bardzo duże (~ 700 milionów wierszy). Czy po ukończeniu pakietu SSIS należy uruchomić jakieś polecenia (jako praktykant DBA!), Aby zmaksymalizować wydajność bazy danych?

Na przykład wykonałem, EXEC sp_updatestatsale zgłosił, że żadne indeksy nie wymagają aktualizacji.

Czy istnieje lista rzeczy do zrobienia po załadowaniu dużej ilości danych, czy też SQL Server 2008 zajmuje się tym wszystkim?

Mark Robinson
źródło

Odpowiedzi:

8

Jeśli ładujesz do pustej bazy danych, możesz / powinieneś podjąć kroki, aby uniknąć konieczności dodatkowych czynności konserwacyjnych po załadowaniu. Fragmentacja jest wrogiem, tego właśnie próbujesz uniknąć.

  • Usuń wszystkie indeksy NC przed załadowaniem.
  • Po załadowaniu dodaj indeksy NC dla każdej tabeli w sekwencji, tzn. Nie dodawaj indeksu do tabeli A, potem tabeli B, a następnie z powrotem do tabeli A. Nie ma to wpływu na fragmentację, ale może skrócić czas dodawania indeksów w bardzo dużych zestawach danych (zmniejsza odejście puli buforów).
  • Jeśli możesz wstawić dane do tabeli w kolejności indeksów klastrowych, pozostaw indeks klastrowany na miejscu. Jeśli nie możesz, zrzuć dane do sterty i przebuduj do załadowanego indeksu klastrowego.

Zamiast kopiować i wklejać, skieruję cię do bardzo obszernej listy referencji dotyczących optymalizacji ETL @Marian, ułożonych w odpowiedzi na pytanie, które zadałem na BCP . Wiele z nich będzie miało takie samo zastosowanie do twojego scenariusza.

Mark Storey-Smith
źródło
2
Co ciekawe, w linku do filmów z SQLCAT i SSIS ich odkrycie nigdy nie spadło indeksu NC. Sądzę, że to kolejny przypadek „zależy”
Billinkc
2
@binkinkc to nie było dla obciążeń przyrostowych, a nie pusta baza danych to pytanie też dotyczy? Tak czy inaczej, testy SQLCAT zwykle obejmują klasę sprzętu rzadko spotykaną w typowych organizacjach.
Mark Storey-Smith,
5

Zależy to od tego, ile masz okna, ale ogólnie aktualizacja statystyk i przebudowa / reorganizacja indeksów jest dobrym krokiem. Poza tym tak naprawdę nie powinno być nic więcej do zrobienia.

Statystyki mówią optymalizatorowi zapytań, ile wierszy może mieć wpływ operacja, a to z kolei informuje SQL, jakie podejście należy zastosować, aby uruchomić zapytania. Wstawianie danych może zniekształcać rozkład, a jeśli nie wstawiłeś wystarczającej liczby wierszy, aby uruchomić aktualizację statystyk w trybie automatycznej aktualizacji, ręczna powinna pomóc. Jeśli masz okno, mówię: zachowaj część dotyczącą aktualizacji statystyk.

Indeksy mogą ulec fragmentacji w miarę dodawania danych. Przebudowa lub reorganizacja pomaga to zmniejszyć, co może prowadzić do poprawy wydajności podczas faktycznego dostępu do danych.

Mike Walsh
źródło
4
Wzdłuż linii Indeksów, w jednym z filmów SSIS z SQLCAT , sugerują one również ogólną zasadę, że jeśli wzrost danych wynosi> 100% i istnieje jeden NCI, upuść je i odtwórz ponownie. Jeśli jest to więcej niż 10%, a są ponad 2 NCI, upuszczenie i odtworzenie przyniesie lepszą wydajność.
billinkc,
2
Tylko w celu wyjaśnienia komentarza Billa - myślę, że on mówi, że sugeruje, aby czasy tworzenia-upuszczania oznaczały Upuszczanie indeksu, ładowanie danych, a następnie ponowne tworzenie indeksu. Zamiast pozostawiać indeks (y) tam podczas ładowania i odbudować po. W każdym razie tak myślę :-) i tak, świetna uwaga, daję +1 temu komentarzowi.
Mike Walsh,