Managing Batches for Bulk Import

W tej części omówiono zarządzanie jak partia rozmiar jest określony dla operacji import zbiorczy.Domyślnie wszystkie wiersze w pliku dane są importowane jako jednej partia nieznany rozmiar w ramach pojedynczej transakcji.W tym przypadek jeśli przed zakończeniem operacji importu, cała transakcja jest cofana, a dane nie są dodawane do tabela docelowej.Następnie nieudanej operacji musi zostać uruchomiony ponownie na początku każdego pliku danych.

Importowanie pliku dużych danych jako pojedyncze zadanie partia może być problematyczne, tak aby BCP oraz BULK INSERT umożliwiają importowanie danych w serii partia, z których każdy jest mniejszy od pliku danych.Każdej partia jest importowany i rejestrowane w oddzielnych transakcji, a po dana transakcja jest zatwierdzona, wiersze zaimportować tej transakcji są przekazywane.Jeśli operacja nie powiedzie się, tylko wiersze importowane z bieżącego partia są przywracane, i można wznowić importowanie danych począwszy od początku nieudanych partia, a nie na początku każdego pliku danych.

Uwaga

Aby uzyskać informacje na temat sposobu działania partii zobacz Batches.

Alternatywnie Jeśli nie ograniczyć wielkość partia, można poprawić wydajność szacowaną rozmiar pliku danych polecenia.Twoje szacowania jest używany przez procesor kwerend, podczas tworzenia planu kwerend dla operacji.

Uwaga

Po określeniu partia rozmiar pliku danych lub rozmiar, dokładność nie jest krytyczna.

Poniższa tabela zawiera podsumowanie kwalifikatory, które obsługują te możliwości.

Polecenie

Rozmiar partia

Wiersze wysłane partia

Kilobajtów wysłana partia

BCP1

-bbatch_size

-h "ROWS_PER_BATCH = bb"

-h "KILOBYTES_PER_BATCH = cc"

WSTAWIANIA ZBIORCZEGO2

BATCHSIZE = batch_size

ROWS_PER_BATCH = rows_per_batch

KILOBYTES_PER_BATCH = kilobytes_per_batch

NoteNote:
Użycie tej opcji z BATCHSIZE generuje błąd.

WSTAW...WYBIERZ * Z OPENROWSET(BULK...)

—3

ROWS_PER_BATCH = rows_per_batch

—3

1 In a bcp command, do not use the -bbatch_size switch and the ROWS_PER_BATCH or KILOBYTES_PER_BATCH hint together.Łączenie tych przyczyn błąd.

2 W poleceniu BULK INSERT Jeśli używasz BATCHSIZE ROWS_PER_BATCH lub KILOBYTES_PER_BATCH, BATCHSIZE ma wyższy priorytet.

3 OPENROWSET ma BATCHSIZE ani KILOBYTES_PER_BATCH opcji.

W poniższych sekcjach opisano wykorzystanie tych kwalifikatorów.

Określanie Przybliżony rozmiar partia

Jeśli importujesz bardzo dużą liczbę wierszy, dzielenie danych na instancje mogą oferować korzyści.Po każdej pełnej partia transakcji jest rejestrowany.Jeśli z jakiegoś powodu operacji importu zbiorczego kończy się przed zakończeniem, tylko dla bieżącej transakcji (@@) zostanie przywrócona.

Uwaga

Rejestrowanie zbiorczej znajduje się kopia importowanych danych dziennik transakcji.Może to spowodować dziennik, aby szybko rosnąć, ale po każdej instancji można wykonywać kopie zapasowe dziennika w celu odzyskania miejsca w dzienniku.

Aby zaimportować plik danych w serii porcjach o określonym rozmiarze, należy użyć następujących Kwalifikator:

  • Dla BCP: -b

  • Dla BULK INSERT: BATCHSIZE

Każdej partia wierszy zostanie wstawiony jako oddzielne transakcji.Jeśli z jakiegoś powodu operacji importu zbiorczego kończy się przed zakończeniem, bieżąca transakcja zostanie przywrócona.For instance, if a data file has 1000 rows, and a batch size of 100 is used, Microsoft SQL Server logs the operation as 10 separate transactions; each transaction inserts 100 rows into the destination table.Jeśli zakończy operację importu zbiorczego podczas ładowania wiersza 750, poprzednie 49 wiersze są usuwane jako SQL Server powoduje powrót bieżącej transakcji. Tabela docelowa nadal zawiera najpierw 700 wierszy.

SQL Server optymalizuje obciążenie automatycznie, zgodnie z wartością wielkości partia, co może doprowadzić do zwiększenia wydajności.Ogólnie rzecz biorąc należy ustawić wielkość partia tak duży jak praktyczne.Zazwyczaj, tym większy partia rozmiar, tym lepsza wydajność operacji importu zbiorczego.Poza kilkoma wyjątkami istnieje jednak.Jeśli istnieje jeden lub więcej indeksów w tabela miejsce docelowe, a następnie większego partia rozmiar może umieścić ciśnienia pamięci do sortowania.Ponadto podczas ładowania równoległych wykonywane bez korzystania z opcji TABLOCK większego partia rozmiar może doprowadzić do zablokowania kilku.

Uwaga

Wielkości partia nie są stosowane, gdy zbiorczej eksportowania danych z wystąpienie SQL Server z plikiem danych.

Określanie Przybliżony rozmiar pliku danych

Jeśli nie określisz partia rozmiar dla operacji importu zbiorczego, można określić Przybliżony rozmiar pliku danych, aby umożliwić procesor kwerend na efektywne przydzielanie zasobów w planie kwerendy.Aby wskazać Przybliżony rozmiar pliku danych, albo oszacować liczbę wierszy lub liczbę kilobajtów danych, w następujący sposób:

  • Szacowanie wierszy partia

    Aby oszacować liczbę wierszy, należy użyć ROWS_PER_BATCH Wskazówka lub opcji.Jeżeli określono wartości > 0, procesor kwerend korzysta z wartości z ROWS_PER_BATCH jako wskazówka dotycząca przydzielanie zasobów w planie kwerendy. Wartość ta powinna być o takiej samej kolejności, jak rzeczywista liczba wierszy.

    Chociaż wszystkie wiersze z pliku danych są kopiowane do wystąpienie SQL Server w jednej partia BCP wyświetla komunikat „ 1 000 wierszy wysłanych do SQL Server"po co 1000 wierszy. Ten komunikat jest wyłącznie w celach informacyjnych i występuje niezależnie od tego, partia rozmiar.

  • Szacowanie kilobajtów na partia

    To estimate the size of the data file in kilobytes, use the KILOBYTES_PER_BATCH hint or option.SQL Server optimizes the bulk-import operation according to the specified value.

Uwaga

Importując zbiorczego pliku dużych danych bez określenia rozmiaru wsadu lub wszystkie optymalizacje minimalne rejestrowania, dziennik transakcji może wypełnić przed zakończeniem operacji import zbiorczy.Aby tego uniknąć, zwiększ dziennik transakcji lub zezwolić na wzrost automatycznie.