Zarządzanie rozmiary wsadowe Kopiuj luzem
Podstawowym celem partia w kopiowanie masowe operacji jest zdefiniowanie zakres transakcji.Jeśli rozmiar wsadu nie jest zestaw, należy go luzem funkcji kopiowania całego kopiowanie masowe do jednej transakcji.Jeśli rozmiar partia jest zestaw, a następnie każdej partia stanowi transakcję, która jest zobowiązana, po zakończeniu partia.
kopiowanie masowe jest wykonywane z określono rozmiaru partia, jeśli wystąpi błąd, cały kopiowanie masowe zostanie przywrócona.Odzyskiwanie długim kopiowanie masowe może trwać bardzo długo czas.Gdy wielkość partia jest zestaw, kopiowanie masowe uzna każdą partię transakcji i zatwierdzenia każdej partia.Jeśli wystąpi błąd ostatniego zaległych partia musi zostać przywrócona.
Wielkość partia może wpłynąć napowietrznych blokowania.Podczas wykonywania kopiowanie masowe przeciwko SQL Server, wskazówka TABLOCK można określić za pomocą bcp_control do nabycia blokada tabela zamiast wierszy blokad.Pojedynczy blokada tabela mogą odbyć minimalne obciążenie cała zbiorcza operacja kopiowania.Jeżeli nie określono TABLOCK blokady są aktywne w poszczególnych wierszach i koszty utrzymania wszystkie blokady na czas trwania kopiowanie masowe może zmniejszyć wydajność.Ponieważ blokady są aktywne tylko dla długości zatwierdzanie, określanie partia rozmiar eliminuje ten problem przez Okresowo Generowanie zatwierdzanie zwolnienia obecnie blokad.
Liczba wierszy tworzących partia może mieć skutki wydajność podczas zbiorczego kopiowania dużą liczbę wierszy.Zalecenia dotyczące partia rozmiar zależy od typu wykonywanej kopiowanie masowe.
Luzem podczas kopiowania do SQL Server, określ wskazówkę kopiowanie masowe TABLOCK i zestaw partia duży rozmiar.
TABLOCK nie jest określony, ograniczenia wielkości partia do mniej niż 1000 wierszy.
Gdy zbiorczego kopiowania w pliku danych wielkość partia jest określona przez wywołanie bcp_control z opcją BCPBATCH przed wywoływaniem bcp_exec.When bulk copying from program variables using bcp_bind and bcp_sendrow, the batch size is controlled by calling bcp_batch after calling bcp_sendrow x times, where x is the number of rows in a batch.
Oprócz określenia rozmiaru transakcji, instancje wpłynąć, gdy wiersze są przesyłane przez sieć do serwera.Funkcji kopiowania luzem normalnie pamięci podręcznej wiersze z bcp_sendrow aż pakiet sieciowy jest wypełniony, a następnie wysłać pełny pakiet do serwera.Gdy aplikacja wywołuje bcp_batch, jednak bieżący pakiet jest wysyłany do serwera, niezależnie od tego, czy zostały wypełnione.Przy użyciu rozmiaru wsadu bardzo niskie może zmniejszyć wydajność, jeśli je wyniki w wysyłanie wielu częściowo wypełnionego pakietów do serwera.Na przykład wywołanie bcp_batch po każdej bcp_sendrow powoduje, że każdy wiersz przesyłane oddzielnie w pakiet i o ile wierszy są bardzo duże, odpady miejsca w każdym pakiet.Domyślny rozmiar pakietów sieciowych dla programu SQL Server jest 4 KB, chociaż aplikacji można zmienić rozmiar wywołując Procedura SQLSetConnectAttr określenie atrybut SQL_ATTR_PACKET_SIZE.
Inny efekt uboczny partia jest, że każdej partia jest uważany za pozostałą zestaw wyników zakończenia z bcp_batch.Jeśli inne operacje są próby na dojścia połączenia w czasie, gdy partia jest wymagalny, SQL Server sterownik ODBC macierzystym klienta problemy błąd z SQLState = "hy000" i błąd wiadomości ciąg:
"[Microsoft][SQL Server Native Client] Connection is busy with
results for another hstmt."
Zobacz także