Optymalizacja wydajności BCP dla danych BLOB

13

Jestem w trakcie planowania migracji na żywo bazy danych 2 TB do tabel partycjonowanych. System jest ogólnie magazynem dokumentów, większość miejsca jest przeznaczona na LOBy od 50 kb do 500 kb, z niewielkim odsetkiem w zakresie od 500 kb do 1 MB. Część migracji będzie obejmować dane BCPing ze starej do nowej bazy danych.

Preferowanym podejściem jest BCP, ponieważ obecny / historyczny podział danych pozwala na ekstrakcję starszych danych etapami (w spokojniejszych okresach) przed ostatecznym przełączeniem, minimalizując wpływ na system na żywo. Ilość danych i dostępność pamięci wykluczają przebudowę na miejscu do schematu partycji .

Podejrzewam, że być może przyniosłoby to pewne zwiększenie wydajności poprzez eksperymentowanie z KILOBYTES_PER_BATCH zamiast ROWS_PER_BATCH z powodu zawartości BLOB. W dokumentacji BCP sugeruje się, że SQL może zoptymalizować operacje na podstawie tej wartości.

Nie mogę znaleźć żadnych wskazówek na temat natury tych optymalizacji ani tego, od czego zacząć testowanie. W absurcji sugestii spróbuję rozpocząć krótkie serie na granicach 4/8/16/32 / 64mb, aby rozpocząć.

Prawdopodobnie niektóre korzyści wynikają ze zmiany rozmiaru pakietu (parametr BCP -a, a nie ustawienie na poziomie serwera), ale jestem skłonny podnieść to do maksimum 65535, chyba że ktoś ma bardziej formalne podejście.

Mark Storey-Smith
źródło

Odpowiedzi:

12

To nie jest bezpośrednia odpowiedź na twoje pytanie, ale są artykuły, które warto przeczytać (na wypadek, gdyby ich najpierw nie znalazłeś :-)). Chodzi o ładowanie dużej ilości danych za pomocą bcp / kopii zbiorczej. Przeczytałem je wszystkie i nie znalazłem nic szczegółowego dotyczącego KILOBYTES_PER_BATCH, wszyscy używają ROWS_PER_BATCH, ale jestem pewien, że znajdziesz inne przydatne informacje.

i oczywiste referencje MSDN:

Z mojego osobistego doświadczenia udało mi się szybko załadować dane przy użyciu ładowania równoległego i testowania z kilkoma wielkościami partii. Myślę, że tylko osobiste testy będą ci odpowiadać. Mam nadzieję, że znajdziesz kilka dobrych porad w referencjach.

Marian
źródło
Dziękuję Marian, dodałem do zakładek kilka nowych znalezisk z tej wyczerpującej listy. Jako jednorazowe zadanie, wiele kroków przyrostowych / udoskonalania nie jest tak użytecznych, ale jest wiele wskazówek, z których mogę skorzystać.
Mark Storey-Smith
Tak, rozumiem, bo dla mnie również było jednorazowe zadanie i znalazłem kilka przydatnych rzeczy na liście. Jest to jednak świetne zadanie :-). Możesz także zrobić małą aplikację .NET (jeśli znasz .NET), tak jak w innym artykule Linchi Shea: Wpływ na wydajność: najbardziej optymalny skrypt wstawiania nie może pokonać pakietu zbiorczego . Możesz znaleźć to samo, co on :-).
Marian
Ponieważ wydaje się, że nie ma żadnych szczegółowych wskazówek BLOB dla BCP na wolności, zaznaczam twoją bardzo dokładną odpowiedź jako zaakceptowaną. Dzięki jeszcze raz.
Mark Storey-Smith
Przepraszam, że nie mogłem ci pomóc, ale mam nadzieję, że znalazłeś w tym coś przydatnego.
Marian