Wskazówki dotyczące optymalizowania importu zbiorczego

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

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

  • Importowanie danych z jednego klient (lub strumienia) częściowo wypełniona, niepuste pole tabela.

    Ostrzeżenie

    Importowanie danych do tabela niepusty jest znany jako import zbiorczy przyrostowych.Pytanie klucz do import zbiorczy przyrostowe jest, czy indeksy powinny być odrzucone wcześniej.

  • Importowanie danych równolegle z blokowania poziom tabela z wieloma klientami (lub strumienie).

  • Copying data between Microsoft SQL Server instances.

Ten temat zawiera również podsumowanie tabela blokowania i rejestrowania podczas operacji import zbiorczy.

Importowanie danych z pojedynczego klienta (lub strumienia) do pustej tabeli

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

  • Określić kwalifikator TABLOCK (który jest dostępny jako opcja na wszystkich trzech metod importu zbiorczego lub wskazówka).Za pomocą kartyblokada powoduje, że poziom tabela blokada podjęcia na czas trwania operacji zbiorczej i eliminuje obciążenie związane z blokadaowanie poszczególnych wierszy.Aby uzyskać więcej informacji, zobacz Kontrolowanie zachowania blokowania dla importu zbiorczego.

  • Zminimalizować rejestrowania.Aby uzyskać więcej informacji, zobacz Wymagania wstępne dotyczące minimalnych logowanie importu zbiorczego.

  • Obsługiwać następujące indeksy.

    Kiedy używasz bcp, ZBIORCZEGO WSTAW lub WSTAW...Wybierz * Z OPENROWSET(BULK...), jeśli tabela jest pusta i zawiera indeks klastrowany i porządkowania danych w pliku danych kolumn klucz indeksu klastrowanego Ponadto, wykonaj następujące czynności:

    Pustą tabela to podejście jest znacznie szybsze niż Tworzenie indeks klastrowany po zaimportowaniu danych, co eliminuje kroku sortowania.

    Ostrzeżenie

    Jeśli tabela niepusty ma indeksy, importy pełni są rejestrowane, nawet w bulk-logged model odzyskiwanie.Aby zdecydować, czy usunąć indeksy, należy rozważyć, czy luzem przywozu do tabela z indeksów nie jest większa niż koszt upuszczanie i ich odtwarzania.

    Jeśli użytkownik import zbiorczy danych do pustej tabeli indeksów i należy określić wielkość partia, tabela staje się niepusty po pierwszej partia.Począwszy od drugiego partia, dane są w pełni zarejestrowane.Puste tabele indeksowanych należy rozważyć w operacji import zbiorczy w jednej partia.

    Ostrzeżenie

    Gdy wielkość partia nie jest określony, domyślnie SQL Server optymalizator kwerendy zakłada domyślny rozmiar na rozmiar pliku danych.Aby zwiększyć wydajność, można użyć kwalifikator ROWS_PER_BATCH lub KILOBYTES_PER_BATCH jako wskazówkę Optymalizator o przybliżonej liczby wierszy w pliku danych.Aby uzyskać więcej informacji, zobacz Zarządzanie rozmiary wsadowe Kopiuj luzem.

    Zazwyczaj szybciej jest import zbiorczy do tabela bez żadnych indeksów niż do import zbiorczy do tabela z indeksami.Dlatego jeżeli pusta tabela żadnych indeksów, należy upuszczania ich przed importować dane do tabeli i utwórz je ponownie później.Dane nie są sortowane kolumna klucz klastrowanego i tabela jest pusta, upuść wszystkie indeksy, importować dane, a następnie utwórz nowe indeksy.

Importowanie danych z pojedynczego klienta (lub strumienia) do tabeli niepusty

Importowanie danych do tabeli zawierającej dane (tabela niepusty) jest znana jako import zbiorczy przyrostowych.Pytanie klucz do import zbiorczy przyrostowe jest, czy indeksy powinny być odrzucone wcześniej.Masz dwie opcje.Można albo Zachowaj indeksy lub można je usunąć i odtworzyć je później.

Podczas importowania danych z pojedynczego klient (lub strumienia) do tabela niepusty, czy zachować indeksy zależy od ilości nowe dane importowane do kwoty istniejących danych w tabela:

  • Jeśli importujesz niewielką ilość nowych danych do kwoty istniejących danych upuszczanie i odbudowywania indeksy mogą być liczników wydajności.Czas wymagany do indeksów jest prawdopodobnie dłużej niż zapisane podczas operacji zbiorczej.

  • Natomiast jeśli importowane są stosunkowo dużą ilość nowych danych, usuwanie indeksów w tabela przed wykonaniem operacji zbiorczej może zwiększyć wydajność, bez znacznego zwiększania czas wymagany do indeksowania.

W poniższej tabela przedstawiono minimalna kwota nowych danych, które powinny być w tabela przed upuść indeksy.Minimalna kwota jest proporcjonalnie do całkowitego dane w tabela.Kwota różni się w zależności od typów i kombinacji indeksy.Nowe dane przekracza sugerowane procent dla danego typu indeksu lub grupowanie indeksów, należy rozważyć usuwanie indeksów przed operacją luzem i odtwarzania je później.Numery te są wrażliwe na wzorzec danych w istniejących danych i ładowania danych.Dlatego liczby stanowią jedynie jako wytyczne ogólne.

Indeksy

Względna ilość nowych danych

Tylko indeks klastrowany

30 procent

Grupowany i jeden indeks nieklastrowany

25 procent

Grupowany i dwóch zbudowania indeksów

25 procent

Tylko jeden indeks nieklastrowany

100 procent

Dwa zbudowania indeksów

60 procent

Importowanie danych równolegle z blokowania na poziomie tabeli z wieloma klientami (lub strumienie)

Jeśli SQL Server jest uruchomiona na komputerze, który ma więcej niż jeden procesor i dane mają być importowane do tabela zbiorczej można podzielić na odrębne pliki, można zwiększyć wydajność przez zaimportowanie danych do tabela z wielu klientów w równoległym.Gdy 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 rozważyć następujące kwestie:

  • Wielu strumieni importu zbiorczego może potencjalnie blok siebie nawzajem.

    Aby temu zapobiec, SQL Server zawiera specjalne blokada wewnętrznego, nazywane blokada (BU) aktualizacja zbiorcza.Aby uzyskać BU blokada, należy określić opcję TABLOCK z każdej zbiorczej importować strumienia bez blokada innych strumieni import zbiorczy.Pozwala to uniknąć konfliktów access tabela Klienci.Jednakże BU blokada jest dostępna tylko w tabela (czy pustych lub niepustych), który ma indeksu.Jeśli określisz TABLOCK tabela z indeksami import zbiorczy równoległego nie jest możliwe.Aby uzyskać więcej informacji, zobacz Kontrolowanie zachowania blokowania dla importu zbiorczego.

    Jeśli tabela zawiera wszystkie indeksy, można korzystać z BU blokowania przez upuszczenie wszystkie indeksy przed danymi import zbiorczy.Następnie można import zbiorczy danych z użyciem TABLOCK i następnie odtwarzania indeks lub indeksy.Zauważ, że jeśli tabela niepusty ma indeksy, importy pełni rejestrowane są, nawet w bulk-logged model odzyskiwanie.Aby zdecydować, czy usunąć indeksy, należy rozważyć, czy luzem przywozu do tabela z indeksów nie jest większa niż koszt upuszczanie i ich odtwarzania.

    Ostrzeżenie

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

    Aby uniknąć gubienia i ponowne tworzenie indeksów, można wykonywać bez określania wskazówka TABLOCK przywozu równoległego.W tym przypadek jednak wielu strumieni importu zbiorczego może potencjalnie blok siebie, a także, optymalizacje rejestrowania luzem są niedostępne.Aby zminimalizować blokowanie, można określić mniejszy rozmiar partia i użyć wskazówka zamówienia wyeliminowanie kroku sortowania podczas import zbiorczy operacji.

  • Dane musi zostać podzielona na kilka plików wejściowych jeden plik klient.Aby najbardziej efektywnie wykorzystać Procesora, pliki danych powinien być podobny rozmiar.

Aby uzyskać więcej informacji, zobacz Importowanie danych równolegle z blokowania na poziomie tabeli.

Blokowanie i rejestrowania podczas importu zbiorczego tabeli

W następującej tabela podsumowano, jak to zrobić, podczas operacji importu zbiorczego, rodzaje blokady są określane przez schematu tabela.Poniższa tabela wskazuje również, czy tabela jest pusta, czy jest TABLOCK zestaw operacji i jaki typ rejestrowania występuje, jeśli bazy danych jest używany model bulk-logged odzyskiwanie.

Ostrzeżenie

Po pierwszej partia pomyślne tabela nie jest pusty.

Importu zbiorczego tabela miejsce docelowe

Czy tabela jest pusta?

To zestaw TABLOCK?

Locks

Rejestrowanie w obszarze modeli odzyskiwanie bulk-logged i proste

Sterty

Tak

Tak

BU-karta

Rejestrowanie luzem

Sterty

Tak

Nie

IX-karta

Pełne rejestrowanie

Sterty

Nie

Tak

BU-karta

Rejestrowanie luzem

Sterty

Nie

Nie

IX-karta

Pełne rejestrowanie

Sterty o jeden indeks klastrowany

Tak

Tak

SCH-M

Rejestrowanie luzem

Sterty o jeden indeks klastrowany

Tak

Nie

IX-karta

Pełne rejestrowanie

Sterty o jeden indeks klastrowany

Nie

Tak

SCH-M

  • Dane — luzem rejestrowania

  • Indeks — pełne rejestrowanie

Sterty o jeden indeks klastrowany

Nie

Nie

IX-karta

Pełne rejestrowanie

Indeks klastrowany

Tak

Tak

SCH-M

Rejestrowanie luzem

Indeks klastrowany

Tak

Nie

IX-karta

Pełne rejestrowanie

Indeks klastrowany

Nie

Tak

X-KARTA

Pełne rejestrowanie

Indeks klastrowany

Nie

Nie

IX-karta

Pełne rejestrowanie

Kopiowanie danych między wystąpieniami serwera SQL

Do masowego kopiowania danych z jednego wystąpienie SQL Server do innego, użyj bcp do eksportowania danych tabela do pliku danych.Następnie użyj jednej z metod import zbiorczy, importowania danych z pliku do tabela.Wykonywanie operacji importu zbiorczego, używając albo macierzystego i wywozu luzem lub Unicode format macierzysty.

Jeśli źródło tabela ma klastrowanego indeksu lub jeżeli zamierzasz luzem importować dane do tabeli z indeksu klastrowanego:

  1. Luzem eksportowania danych z źródło tabela za pomocą bcp z kwerendy opcji instrukcja SELECT i tworzenie pliku danych zamówione przy użyciu odpowiednich klauzula ORDER BY.Aby uzyskać więcej informacji, zobacz Narzędzie bcp.

  2. Luzem podczas importowania danych do SQL Server.Użyj kwalifikator zamówienia, który jest obsługiwany tylko przez bcp i WSTAW luzem.Aby uzyskać więcej informacji, zobacz Kontrolowanie porządek sortowania podczas zbiorczego, importowanie danych.

Aby uzyskać więcej informacji, zobacz Kopiowanie danych między serwerami.