Zarządzanie instancje importu zbiorczego
W tej części omówiono zarządzanie, jak rozmiar partia jest określony dla operacji import zbiorczy.Domyślnie wszystkie wiersze w pliku danych są importowane jako pojedynczej partia nieznany rozmiar w pojedynczej transakcji.W takim przypadek, jeśli przed zakończeniem operacji importu, cała transakcja jest cofana i dane nie są dodawane do obiekt docelowy tabela.Następnie należy ponownie nieudanej operacji na początku pliku danych.
Importowanie pliku danych dużych jako pojedynczej partia może być problematyczne, tak aby bcp i WSTAW luzem umożliwiają importowanie danych w serii partia, z których każdy jest mniejszy niż plik danych.Każda partia jest przywożone i rejestrowane w oddzielnej transakcji i po danym transakcja została zatwierdzona, zobowiązane są wiersze, przywożone przez danej transakcji.W przypadku niepowodzenia operacji tylko wiersze przywożonych z bieżącej instancji jest przywracana i wznowić importowanie danych uruchamiania na początku nieudane partia, a nie na początku pliku danych.
Ostrzeżenie
Aby uzyskać informacje dotyczące sposobu działania partii, zobacz Partie.
Alternatywnie Jeśli nie chce ograniczać partia rozmiar, można zwiększyć wydajność przez szacowanie rozmiaru pliku danych polecenia.Oszacowania jest używany przez procesor kwerend, tworząc plan kwerend dla operacji.
Ostrzeżenie
Dokładność określenia wielkości partia lub rozmiar pliku danych, nie jest krytyczna.
W następującej tabela podsumowano kwalifikatory, obsługujących tych alternatyw.
Polecenia |
Wielkość partii |
Wiersze wysłane na partię |
Kilobajtów wysłanych na partię |
---|---|---|---|
BCP1 |
-bbatch_size |
-h "ROWS_PER_BATCH = bb" |
-h "KILOBYTES_PER_BATCH = DW" |
WSTAW luzem2 |
BATCHSIZE = batch_size |
ROWS_PER_BATCH = rows_per_batch |
KILOBYTES_PER_BATCH = kilobytes_per_batch
Uwaga:
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.Łącząc te przyczyny błędu.
2 Luzem WSTAW polecenie używania BATCHSIZE z ROWS_PER_BATCH lub KILOBYTES_PER_BATCH, BATCHSIZE ma pierwszeństwo.
3 OPENROWSET ma opcje BATCHSIZE ani KILOBYTES_PER_BATCH.
W poniższych sekcjach opisano wykorzystanie kwalifikatory.
Określanie wielkości przybliżone partii
Jeśli importujesz bardzo dużą liczbę wierszy, dzielenie danych na partie można oferują korzyści.Po każdej partia pełną transakcji jest rejestrowany.Jeśli z jakiegoś powodu operacji importu zbiorczego kończy się przed zakończeniem, tylko bieżącej transakcji (partia) jest przywracana.
Ostrzeżenie
Rejestrowanie luzem zawiera kopię importowanych danych w dzienniku transakcji.Może to spowodować dziennika szybko rosnąć, ale po każdej partia można tworzyć kopię zapasową dziennika do odzyskania miejsca w dzienniku.
Aby zaimportować plik danych w serii partii określonego rozmiaru, użyj kwalifikator następujące:
For bcp: -b
Aby WSTAWIĆ luzem: BATCHSIZE
Każda partia wierszy jest wstawiany jako oddzielna transakcja.Jeśli z jakiegoś powodu operacji importu zbiorczego kończy się przed zakończeniem, bieżąca transakcja jest przywracana.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 podczas ładowania wiersza 750 zakończy się operacja importu zbiorczego, poprzednie 49 wiersze są usuwane jako SQL Server wycofuje bieżącej transakcji.obiekt docelowy tabela nadal zawiera wiersze najpierw 700.
SQL Server automatycznie optymalizuje ładunku, zgodnie z partia wartość rozmiaru, co może spowodować lepszą wydajność.Ogólnie rzecz biorąc należy sprawdzić wielkość partia tak duży jak praktycznych.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ć presji pamięci do sortowania.Ponadto podczas ładowania równoległe wykonywane bez korzystania z opcji TABLOCK większego partia rozmiar może doprowadzić do blokowania więcej.
Ostrzeżenie
Rozmiary partii nie są stosowane, gdy luzem eksportowania danych z wystąpienie z SQL Server do pliku danych.
Określanie Przybliżony rozmiar pliku danych
Jeśli nie określisz partia rozmiar dla operacji importu zbiorczego można wskazać Przybliżony rozmiar pliku danych, aby umożliwić procesor kwerend efektywnego przydzielania zasobów w planu kwerend.Aby wskazać Przybliżony rozmiar pliku danych, albo oszacować liczbę wierszy lub liczbę kilobajtów danych, w następujący sposób:
Szacowanie wierszy napartia
Aby oszacować liczbę wierszy, należy użyć opcji lub wskazówka ROWS_PER_BATCH.Jeżeli określono wartość > 0, procesor kwerend używa wartości ROWS_PER_BATCH jako wskazówka dla alokacji zasobów w planu kwerend.Wartość ta powinna być tego samego rzędu jako rzeczywista liczba wierszy.
Chociaż wszystkie wiersze z pliku danych są kopiowane do wystąpienie SQL Server w jednej partia, bcp wyświetla komunikat "1000 wierszy wysyłane do SQL Server"" Po co 1000 wierszy.Ten komunikat jest wyłącznie w celach informacyjnych i występuje niezależnie od wielkości partia.
Szacowanie kilobajtówpartia
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.
Ostrzeżenie
Podczas zbiorczego importowania pliku danych bez określania wielkości partia lub wszystkie optymalizacje minimalne rejestrowania, dziennika transakcji może wypełnić przed zakończeniem operacji import zbiorczy.Aby uniknąć tej sytuacji, powiększyć dziennika transakcji lub zezwalanie na wzrost automatycznie.
Zobacz także