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
TABLOCK
gợi ý (cú pháp chính xác thay đổi tùy theo phương thức chèn)
- Chỉ định
ORDER
gợ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