Zarządzanie rozmiary kopiowanie masowe instancji

Podstawowym celem instancji w kopiowanie masowe operacji jest do definiowania zakres transakcji.Jeśli rozmiar wsadu nie jest zestaw, a następnie należy wziąć pod uwagę funkcje kopiowanie masowe kopii cała zbiorcza do jednej transakcji.Jeśli rozmiar wsadu zestaw, a następnie każdej partia stanowi transakcję, która jest zadeklarowana, po zakończeniu tej instancji.

Jeśli wystąpi błąd kopiowanie masowe jest wykonywane z wielkość partia, nie określono, kopia cała zbiorcza zostanie przywrócona.Odzyskiwanie kopiowanie masowe długim może zająć dużo czas.Gdy jest wielkość partia zestaw, kopiowanie masowe uzna każdej partia transakcji i przekazywania każdej partia.Jeśli wystąpi błąd, tylko ostatni zaległe partia musi zostać przywrócona.

Wielkość partia może również wpłynąć na blokowanie dodatkowe obciążenie.Podczas wykonywania kopiowanie masowe przed SQL Server, wskazówka TABLOCK można określać przy użyciu bcp_control uzyskanie blokada tabela zamiast blokad wiersza.Blokada jednej tabela może być przechowywana z minimalne obciążenie dla cały kopiowanie masowe operacji.Jeżeli nie określono TABLOCK blokady przechowywane są w poszczególnych wierszach, a koszty utrzymania wszystkie blokady przez czas trwania kopiowanie masowe może zmniejszyć wydajność.Ponieważ blokady przechowywane są tylko przez okres transakcji, określanie partia rozmiar rozwiązuje ten problem przez co pewien czas generowania transakcji, które powoduje zwolnienie blokady, aktualnie przechowywane.

Liczba wierszy tworzących partia mogą mieć wpływ wydajności istotne w przypadku zbiorczego kopiowania dużą liczbę wierszy.Zalecenia dotyczące partia rozmiar zależą od rodzaju wykonywanej kopiowanie masowe.

  • Kiedy zbiorczej, kopiowanie SQL Server, określ wskazówkę kopii TABLOCK zbiorczej i ustaw dużych partia rozmiar.

  • Nie określono TABLOCK, ograniczenia wielkości partia do mniej niż 1000 wierszy.

W przypadku zbiorczego kopiowania w z pliku danych, wielkość partia jest określona przez wywołanie bcp_control z opcją BCPBATCH przed wywołaniem 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 również na wygląd, gdy wiersze są przesyłane przez sieć do serwera.Funkcje kopiowanie masowe zwykle pamięci podręcznej wiersze z bcp_sendrow dopóki pakiet sieciowy jest wypełnione, 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ł wprowadzony.Za pomocą wielkości partia bardzo niski może zmniejszyć wydajność, jeżeli jej powoduje wysyłanie wielu częściowo wypełnionego pakietów do serwera.Na przykład wywołanie bcp_batch po każdym bcp_sendrow powoduje, że każdy wiersz do wysłania w oddzielnych pakiet i, jeśli wiersze są bardzo duże odpadów ilość miejsca w każdym pakiecie.Domyślny rozmiar pakietów sieciowych dla programu SQL Server jest 4 KB, mimo że aplikacja może zmienić rozmiar, wywołując SQLSetConnectAttr określenie atrybut SQL_ATTR_PACKET_SIZE.

Inny efektem ubocznym partii jest, że każda partia jest uważana za zaległe wynik ustawić zakończenia z bcp_batch.Jeśli inne operacje są próby na dojście do połączenia w czasie, gdy zadanie partia jest zaległe, SQL ServerMacierzysty sterownik ODBC klient problemów z SQLState błąd = "HY000" i ciągiem komunikat o błędzie o:

"[Microsoft][SQL Server Native Client] Connection is busy with
results for another hstmt."