BCP dừng lại sau 1000 hàng cuối cùng được gửi đến SQL Server. Tổng số đã gửi:


7

Tôi đã chạy BCP chương trình sao chép số lượng lớn của SQL Server 2005 như thế này:

bcp mydb.dbo.mytbl in myfile.blk -c -S mysvr -U mylogin -P mypass

Và nó chạy và sản xuất đầu ra như vậy:

Starting copy...
1000 rows sent to SQL Server. Total sent: 1000
...
1000 rows sent to SQL Server. Total sent: 55000

Nhưng rồi nó dừng lại. Con trỏ không quay lại dấu nhắc, tôi chưa nhận được "... hàng được sao chép." thông điệp.

Tôi đã thử truy vấn bảng đích và tôi đã có thể thấy các hàng mà tôi muốn nhập.

Tôi sẽ chấm dứt giao diện điều khiển? Nó sẽ quay trở lại?

Câu trả lời:


2

Quá trình dường như bị treo bởi vì, mặc dù nó đã gửi tất cả dữ liệu tới SQL Server, dữ liệu chỉ được đặt trong bộ đệm sắp xếp - nó chưa đến được bảng đích.

Khi bảng có chỉ mục, SQL Server sẽ sắp xếp dữ liệu theo thứ tự chỉ mục cần thiết trước khi chèn. Nếu tập dữ liệu lớn, có nhiều chỉ mục hoặc SQL Server không có đủ bộ nhớ sắp xếp, quá trình này có thể mất thời gian đáng kể. Sự hiện diện của các chỉ mục và dữ liệu bảng hiện có cũng có thể ảnh hưởng đến khả năng của SQL Server sử dụng các phần chèn được ghi tối thiểu.

Nếu không có các bản ghi được ghi tối thiểu, quá trình chèn (sau khi sắp xếp) cũng sẽ chậm vì mỗi hàng được ghi lại đầy đủ trong nhật ký giao dịch (bao gồm thông tin cần thiết để hoàn tác chèn để đảm bảo khả năng phục hồi).

Một số tùy chọn bcp có thể được chỉ định để giúp đạt được các bản ghi được ghi tối thiểu. Các biện pháp khác cũng có thể cần thiết, chẳng hạn như thay đổi tạm thời mô hình phục hồi của cơ sở dữ liệu để hỗ trợ các hoạt động hàng loạt hiệu quả. Bỏ các chỉ mục không bao gồm trước khi chèn và xây dựng lại chúng sau đó cũng thường là chiến lược tối ưu.

Để tóm tắt những điểm chính của một chủ đề phức tạp:

  • Sử dụng mô hình khôi phục hỗ trợ chèn tối thiểu được ghi nhật ký
  • Chỉ định một TABLOCKgợi ý (cú pháp chính xác thay đổi tùy theo phương thức chèn)
  • Chỉ định ORDERgợi ý và đảm bảo nguồn dữ liệu được sắp xếp trước theo khóa phân cụm
  • Vô hiệu hóa kích hoạt và ràng buộc
  • Nạp vào một bảng trống nếu có thể

Để biết thêm thông tin, xem:

Tối ưu hóa hiệu suất chèn hàng loạt và các trang được liên kết

Đối với SQL Server 2008 trở lên:

Hướng dẫn hiệu suất tải dữ liệu


2

Sau 3 giờ, cuối cùng tôi đã nhận được lời nhắc của mình:

55837 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 10582641 Average : (5.28 rows per sec.)

Mặc dù tôi vẫn không biết tại sao nó không quay trở lại ngay lập tức vì các hàng đã được chèn. Dự đoán tốt nhất của tôi là nó đã xây dựng lại chỉ mục.

Tôi sẽ cố gắng chấm dứt giao diện điều khiển vào lần tiếp theo khi nó bị treo như thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.