Udostępnij za pośrednictwem


Guidelines for Optimizing Bulk Import

W tym temacie uzna wytycznych w celu zoptymalizowania wydajności dla kilku import zbiorczy scenariuszy:

  • Importowanie danych z jednego klient (lub strumienia) do pustej tabela.

  • Importowanie danych z jednego klient (lub strumienia) do częściowo wypełnionego, nie jest pusta tabela.

    Uwaga

    Importowanie danych do tabela nie jest pusta nazywa się import zbiorczy przyrostowych.Pytanie klucz dla import zbiorczy przyrostowe jest, czy indeksy powinny być odrzucone wcześniej.

  • Importowanie danych równolegle z poziom tabela blokowania z wielu klientów (lub strumienie).

  • Copying data between Microsoft SQL Server instances.

W tym temacie opisano także podsumowanie tabela blokady i rejestrowania podczas operacji import zbiorczy.

Importowanie danych z jednego klient (lub Stream) do pustej tabela

Podczas importowania danych do pustej tabela z pojedynczego klient (lub strumienia), Microsoft Zaleca się, wykonaj następujące czynności

  • Określ kwalifikator TABLOCK (która jest dostępna jako wskazówka lub opcję na wszystkich trzech metod importu zbiorczego).Za pomocą TABLOCK powoduje blokadę poziomie tabela podejmowane przez cały czas trwania operacji zbiorczej i eliminuje dodatkowego obciążenia związanego z blokowaniem poszczególnych wierszy.Aby uzyskać więcej informacji zobaczControlling Locking Behavior for Bulk Import.

  • Minimalizowanie rejestrowania.Aby uzyskać więcej informacji zobaczPrerequisites for Minimal Logging in Bulk Import.

  • Obsługuje indeksy w następujący sposób.

    W przypadku korzystania z BCP, ZBIORCZA INSERT lub INSERT...SELECT * FROM OPENROWSET(BULK...), jeśli tabela jest pusta i zawiera indeks klastrowany i porządkowania danych w pliku danych do kolumn klucz w indeksie klastrowanym, dodatkowo, wykonaj następujące czynności:

    Do pustej tabela to podejście jest znacznie szybsze niż Tworzenie indeks klastrowany po zaimportowaniu danych, ponieważ eliminuje etap sortowania.

    Uwaga

    Jeśli indeksy tabela nie jest pusta, przywóz zbiorczej pełni rejestrowane są, nawet w modelu odzyskiwanie rejestrowane zbiorczej.Aby zdecydować, czy należy usunąć indeksy, należy wziąć pod uwagę czy korzyści wynikające z importu zbiorczego do tabela z indeksów nie jest większa niż koszt upuszczania oraz ich odtwarzania.

    Jeśli użytkownik import zbiorczy danych do pustej tabeli z indeksami i można określić wielkość partia, tabela staje się nie jest pusta po pierwszym partia.Począwszy od drugiego partia, dane są w pełni zarejestrowany.Puste tabele indeksowanych należy rozważyć w operacji import zbiorczy w jednej partia.

    Uwaga

    Gdy rozmiar wsadu nie jest określony, domyślnie SQL Server optymalizator kwerendy zakłada rozmiar domyślny rozmiar pliku danych. Aby zwiększyć wydajność, Kwalifikator ROWS_PER_BATCH lub KILOBYTES_PER_BATCH mogą być używane jako wskazówka dotycząca do optymalizowania informacje o przybliżonej liczby wierszy w pliku danych.Aby uzyskać więcej informacji zobaczZarządzanie rozmiary kopiowanie masowe instancji.

    Ogólnie rzecz biorąc szybciej jest zbiorcza importu do tabela bez żadnych indeksów niż aby zbiorczej importu do tabela z indeksami.W związku z tym jeżeli pusta tabela zawiera wszystkie indeksy, użytkownik powinien upuść je przed rozpoczęciem importowania danych do tabeli i utwórz je ponownie później.Jeśli dane nie są sortowane kolumna klucz klastrów i tabela jest pusta, usunąć wszystkie indeksy, importować dane, a następnie utwórz nowe indeksy.

Importowanie danych z jednego klient (lub Stream) do tabela niepustego

Importowanie danych do tabeli, która już zawiera dane (tabela nie jest pusta) jest nazywany import zbiorczy przyrostowych.Pytanie klucz dla import zbiorczy przyrostowe jest, czy indeksy powinny być odrzucone wcześniej.Dostępne są dwie opcje.Możesz albo zachować indeksy lub sieci może je usunąć i odtworzyć je później.

Podczas importowania danych z jednego klient (lub strumienia) do tabela nie jest pusta, czy chcesz zachować indeksy zależy od ilości nowe dane importowane względem liczby istniejących danych w tabela:

  • Jeśli importujesz niewielką ilość nowych danych w stosunku do liczby istniejących danych, upuszczając i przebudowa indeksy mogą być licznik wydajności.Czas, aby ponownie utworzyć indeksy, to może być dłuższa niż podczas zapisywania podczas operacji zbiorczej.

  • Natomiast stosunkowo dużej ilości nowe dane są importowane, upuszczając indeksy w tabela przed wykonaniem operacji zbiorczej może zwiększyć wydajność, bez znaczne zwiększenie czas wymaganego do indeksowania.

Poniższa lista zawiera minimalną ilość nowych danych, które powinny znajdować się w tabela przed upuść indeksów.Kwota minimalna jest proporcjonalnie do całkowitej dane w tabela.Kwota różni się w zależności od typów i kombinacje indeksów.Jeśli nowe dane, które przekraczają sugerowane wartości procentowej dla danego typu z indeksu lub grupowanie indeksów, należy wziąć pod uwagę upuszczanie indeksów przed wykonaniem operacji zbiorczej i odtwarzania je później.Numery te są wrażliwe na wzorzec danych istniejących danych i dane, które mają być ładowane.Dlatego numery zapewniają tylko jako ogólne wskazówki.

Indeksy

Względną ilość danych, Nowa

Tylko indeks klastrowany

30 procent

Zgromadzone i jeden indeks nieklastrowany

25 procent

Zgromadzone i dwa ponownego zbudowania indeksów nie klastrowanych

25 procent

Tylko jeden indeks nieklastrowany

100 procent

Dwa ponownego zbudowania indeksów nie klastrowanych

60 procent

Importowanie danych w równoległy z poziom tabela blokowania z wielu klientów (lub strumienie)

Jeśli SQL Server jest uruchomiona na komputerze, na którym jest więcej niż jeden procesor i danych, które mają być importowane do tabela zbiorczej można podzielić na odrębne pliki, można zwiększyć wydajność przez importowanie danych do tabela, z kilku klientów równocześnie. W przypadku zbiorczego importowanie wielu klientów w jednej tabela, każdy klient musi mieć własny plik danych wejściowych.

Podczas importowania danych do tabela z wielu klientów, należy wziąć pod uwagę następujące kwestie:

  • Wiele strumieni importu zbiorczego może potencjalnie blok sobie nawzajem.

    Aby zapobiec temu SQL Server zawiera specjalne lock wewnętrznego, o nazwie blokada aktualizacji zbiorczej (BU). Uzyskanie BU blokada należy określić opcję TABLOCK z każdego zbiorczej importować strumienia bez blokada innych strumieni import zbiorczy.Pozwala to uniknąć konfliktów dostępu do tabela Klienci.Jednak blokadę BU jest dostępna tylko dla tabela (niezależnie od tego, czy pusty lub nie jest pusta), nie ma indeksu.Jeśli określisz TABLOCK tabela z indeksami, import zbiorczy równoległego nie jest możliwe.Aby uzyskać więcej informacji zobaczControlling Locking Behavior for Bulk Import.

    Jeśli tabela zawiera wszystkie indeksy, można skorzystać z BU blokowanie przez upuszczenie wszystkie indeksy przed danymi import zbiorczy.Użytkownik może następnie import zbiorczy danych jednocześnie przy użyciu TABLOCK i następnie odtwarzania indeks lub indeksy.Zauważ, że, gdy nie jest pusta tabela zawiera indeksy, przywóz zbiorczej są całkowicie rejestrowane, nawet w rejestrowane zbiorczej model odzyskiwanie.Aby zdecydować, czy należy usunąć indeksy, należy wziąć pod uwagę czy korzyści wynikające z importu zbiorczego do tabela z indeksów nie jest większa niż koszt upuszczania oraz ich odtwarzania.

    Uwaga

    Jeśli upuścisz indeksów pomocniczych, należy rozważyć ich odtwarzania równolegle, tworząc każdy indeks pomocniczy z oddzielnych klient.

    Aby uniknąć usunięcie i ponowne tworzenie indeksów, można wykonywać równolegle importu bez określenia wskazówka TABLOCK.W tym przypadek jednak wiele strumieni importu zbiorczego mogą potencjalnie zablokować, i również optymalizację rejestracji zbiorczej są niedostępne.Aby zminimalizować blokowanie, określ mniejszy rozmiar wsadu i używać wskazówki dotyczącej ORDER wyeliminować sortowania krok podczas import zbiorczy operacji.

  • Dane muszą być podzielone na kilka plików wejściowych, jeden plik klient.Aby najbardziej efektywnie wykorzystać PROCESORA, powinien być podobny pod względem rozmiarów plików danych.

Aby uzyskać więcej informacji zobaczImporting Data in Parallel with Table Level Locking.

Blokowanie i rejestrowania podczas import zbiorczy tabela

W następującej tabela podsumowano, jak to zrobić, podczas operacji importu zbiorczego, typy blokady są określane na podstawie schematu tabela.W poniższej tabeli wskazuje również, czy tabela jest pusta, czy ustawiono dla operacji TABLOCK i jaki typ rejestrowania występuje, gdy baza danych jest za pomocą modelu odzyskiwanie rejestrowane zbiorczej.

Uwaga

Po pierwszym partia powiodła się w tabela nie jest pusty.

Importu zbiorczego tabela miejsce docelowe

Tabela jest pusta?

Czy zestaw TABLOCK?

Locks

Rejestrowanie w modelach odzyskiwanie rejestrowane zbiorczej i proste

Sterty.

Tak

Tak

BU-karta

Rejestrowanie zbiorczej

Sterty.

Tak

Nie

IX-karta

Rejestrowanie pełne

Sterty.

Nie

Tak

Karta BU

Rejestrowanie zbiorczej

Sterty.

Nie

Nie

IX-karta

Rejestrowanie pełne

Sterty o jednym indeksie bez klastrów

Tak

Tak

SCH-M

Rejestrowanie zbiorczej

Sterty o jednym indeksie bez klastrów

Tak

Nie

IX-karta

Rejestrowanie pełne

Sterty o jednym indeksie bez klastrów

Nie

Tak

SCH-M

  • Dane — zbiorczej rejestracji

  • Indeks — pełne rejestrowanie

Sterty o jednym indeksie bez klastrów

Nie

Nie

IX-karta

Rejestrowanie pełne

Indeks klastrowany

Tak

Tak

SCH-M

Rejestrowanie zbiorczej

Indeks klastrowany

Tak

Nie

IX-karta

Rejestrowanie pełne

Indeks klastrowany

Nie

Tak

X-KARTA

Rejestrowanie pełne

Indeks klastrowany

Nie

Nie

IX-karta

Rejestrowanie pełne

Kopiowanie danych między wystąpienia serwera SQL

Do masowego kopiowania danych z jednego wystąpienie SQL Server do innego należy użyć BCP do eksportowania danych tabela pliku danych.Następnie użyj jednej z metod import zbiorczy importowania danych z pliku do tabela.Przeprowadzić eksport zbiorczej i import zbiorczy operacje, korzystając z macierzystego lub macierzystym formacie Unicode.

Jeśli urządzenie źródłowe tabela ma klastrowanego indeksu lub jeżeli zamierzasz zbiorczej importować dane do tabela z indeksu klastrowanego:

  1. Zbiorcza eksportowania danych z tabela źródłowej przy użyciu BCP with the kwerendy opcja instrukcja SELECT i tworzenie pliku danych uporządkowanych przy użyciu odpowiednich klauzulę ORDER BY.Aby uzyskać więcej informacji zobaczNarzędzie BCP.

  2. Zbiorcza podczas importowania danych do SQL Server. Za pomocą kwalifikator ORDER, który jest obsługiwany tylko przez BCP i BULK INSERT.Aby uzyskać więcej informacji zobaczControlling the Sort Order When Bulk Importing Data.

Aby uzyskać więcej informacji zobaczCopying Data Between Servers.