2011-06-07 63 views
5

Tôi có tuyên bố INSERT đang ăn nhiều địa ngục, rất nhiều để ổ cứng thực sự được lấp đầy trước khi câu lệnh hoàn thành.Ghi nhật ký tối thiểu Chèn vào

Điều này là, tôi thực sự không cần điều này để đăng nhập vì đây chỉ là bước tải lên dữ liệu trung gian.

Vì đối số, chúng ta hãy nói rằng tôi có:

  • Bảng A: bảng tải lên ban đầu (dân cư sử dụng bcp, vì vậy không có vấn đề khai thác gỗ)
  • Bảng B: dân cư sử dụng INSERT INTO B from A

Có cách nào mà tôi có thể sao chép giữa A và B mà không có bất cứ điều gì được ghi vào nhật ký không?

P.S. Tôi đang sử dụng SQL Server 2008 với đơn giản mô hình khôi phục.

Trả lời

3

Từ Louis Davidson, Microsoft MVP:

Không có cách nào để chèn mà không khai thác gỗ ở tất cả. CHỌN INTO là cách tốt nhất để giảm thiểu việc đăng nhập T-SQL, bằng SSIS bạn có thể thực hiện cùng một kiểu ghi nhật ký ánh sáng bằng cách sử dụng Chèn số lượng lớn .

Từ yêu cầu của bạn, tôi sẽ lẽ sử dụng SSIS, thả tất cả hạn chế, đặc biệt là độc đáo và những khóa chính, tải dữ liệu trong, thêm những hạn chế lại. Tôi tải khoảng 100 GB chỉ trong hơn một giờ như điều này, với chi phí khá thấp. Tôi đang sử dụng mô hình khôi phục BULK LOGGED, chỉ ghi nhật ký sự tồn tại của các phần mở rộng mới trong quá trình ghi nhật ký, sau đó bạn có thể xóa chúng sau này.

Điều quan trọng là bắt đầu với biểu ngữ bảng và nó chỉ kêu la. Xây dựng chỉ mục một lần rời khỏi bạn sẽ không còn chỉ mục nào để duy trì, chỉ cần xây dựng chỉ mục chỉ mục cho mỗi chỉ mục.

Nếu bạn không muốn sử dụng SSIS, điểm vẫn áp dụng để xóa tất cả các ràng buộc của bạn và sử dụng mô hình khôi phục BULK LOGGED. Điều này làm giảm đáng kể việc ghi nhật ký được thực hiện trên các câu lệnh INSERT INTO và do đó sẽ giải quyết vấn đề của bạn.

http://msdn.microsoft.com/en-us/library/ms191244.aspx

+0

Tôi có chỉ số số PK và số công bằng trên các bảng này cũng như một số giá trị mặc định. PK và chỉ mục tôi có thể thả và tạo, nhưng tôi cần các giá trị mặc định trong INSERT – Karl

+0

@Karl - Điều đó là tốt. Nó sẽ làm chậm INSERT của bạn nhưng vấn đề chính của bạn là kích thước nhật ký, sẽ được giải quyết bằng mô hình khôi phục 'BULK LOGGED'. Tốc độ tăng phần lớn chỉ là một phần thưởng. Bạn sẽ cần phải xem xét để đảm bảo rằng bản ghi được chèn không gây ra các kích hoạt để kích hoạt, vì điều đó cũng có thể làm tăng tệp nhật ký của bạn ngay cả trong mô hình khôi phục 'BULK LOGGED' mà tôi tin. – IAmTimCorey

+0

Không sử dụng Cờ 610 cho phép chúng tôi chèn ..với ghi nhật ký tối thiểu? – FLICKER

2

Tải lên dữ liệu vào tempdb thay vì cơ sở dữ liệu của bạn, và làm tất cả những biến đổi trung gian trong tempdb. Sau đó chỉ sao chép dữ liệu cuối cùng vào cơ sở dữ liệu đích. Sử dụng các lô để giảm thiểu kích thước giao dịch riêng lẻ.Nếu bạn vẫn gặp vấn đề, nhìn vào triển khai theo dõi cờ 610, xem The Data Loading Performance GuidePrerequisites for Minimal Logging in Bulk Import:

vết Cờ 610

SQL Server 2008 giới thiệu dấu vết cờ 610, kiểm soát tối thiểu đăng nhập chèn vào các bảng được lập chỉ mục.

Các vấn đề liên quan