Bagikan melalui


Mengelola Ukuran Batch Salin Massal

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Tujuan utama batch dalam operasi penyalinan massal adalah untuk menentukan cakupan transaksi. Jika ukuran batch tidak diatur, fungsi penyalinan massal mempertimbangkan seluruh salinan massal menjadi satu transaksi. Jika ukuran batch diatur, maka setiap batch merupakan transaksi yang dilakukan saat batch selesai.

Jika salinan massal dilakukan tanpa ukuran batch yang ditentukan dan terjadi kesalahan, seluruh salinan massal digulung balik. Pemulihan salinan massal yang berjalan lama dapat memakan waktu lama. Ketika ukuran batch diatur, salinan massal mempertimbangkan setiap batch transaksi dan menerapkan setiap batch. Jika terjadi kesalahan, hanya batch terakhir yang beredar yang perlu digulung balik.

Ukuran batch juga dapat memengaruhi overhead penguncian. Saat melakukan salinan massal terhadap SQL Server, petunjuk TABLOCK dapat ditentukan menggunakan bcp_control untuk memperoleh kunci tabel alih-alih kunci baris. Kunci tabel tunggal dapat ditahan dengan overhead minimal untuk seluruh operasi penyalinan massal. Jika TABLOCK tidak ditentukan, kunci ditahan pada baris individual dan overhead mempertahankan semua kunci selama durasi penyalinan massal dapat memperlambat performa. Karena kunci hanya ditahan untuk lamanya transaksi, menentukan ukuran batch mengatasi masalah ini dengan secara berkala menghasilkan penerapan yang membebaskan kunci yang saat ini disimpan.

Jumlah baris yang membentuk batch dapat memiliki efek performa yang signifikan saat menyalin sejumlah besar baris. Rekomendasi untuk ukuran batch tergantung pada jenis salinan massal yang dilakukan.

  • Saat menyalin secara massal ke SQL Server, tentukan petunjuk penyalinan massal TABLOCK dan atur ukuran batch besar.

  • Ketika TABLOCK tidak ditentukan, batasi ukuran batch hingga kurang dari 1.000 baris.

Saat menyalin secara massal dari file data, ukuran batch ditentukan dengan memanggil bcp_control dengan opsi BCPBATCH sebelum memanggil bcp_exec. Saat menyalin secara massal dari variabel program menggunakan bcp_bind dan bcp_sendrow, ukuran batch dikontrol dengan memanggil bcp_batch setelah memanggil bcp_sendrowx kali, di mana x adalah jumlah baris dalam batch.

Selain menentukan ukuran transaksi, batch juga memengaruhi kapan baris dikirim di seluruh jaringan ke server. Fungsi penyalinan massal biasanya menyimpan baris dari bcp_sendrow hingga paket jaringan terisi, lalu mengirim paket lengkap ke server. Namun, ketika aplikasi memanggil bcp_batch, paket saat ini dikirim ke server terlepas dari apakah telah diisi. Menggunakan ukuran batch yang sangat rendah dapat memperlambat performa jika menghasilkan pengiriman banyak paket yang diisi sebagian ke server. Misalnya, memanggil bcp_batch setelah setiap bcp_sendrow menyebabkan setiap baris dikirim dalam paket terpisah dan, kecuali barisnya sangat besar, membuang ruang di setiap paket. Ukuran default paket jaringan untuk SQL Server adalah 4 KB, meskipun aplikasi dapat mengubah ukuran dengan memanggil SQLSetConnectAttr yang menentukan atribut SQL_ATTR_PACKET_SIZE.

Efek samping lain dari batch adalah bahwa setiap batch dianggap sebagai hasil yang luar biasa yang ditetapkan sampai selesai dengan bcp_batch. Jika ada operasi lain yang dicoba pada handel koneksi saat batch luar biasa, driver ODBC Klien Asli SQL Server mengeluarkan kesalahan dengan SQLState = "HY000" dan string pesan kesalahan:

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

Lihat Juga

Melakukan Operasi Salin Massal (ODBC)
Impor dan Ekspor Data Massal (SQL Server)