2010-08-16 42 views
5

Vì một số lý do tệp MDF của tôi là 154gigs, tuy nhiên, tôi chỉ nạp 7 hợp đồng biểu diễn dữ liệu từ tệp phẳng. Tại sao tệp MDF lớn hơn nhiều so với dữ liệu nguồn thực tế?Kích thước tệp MDF lớn hơn nhiều so với dữ liệu thực tế

Thông tin khác:

Chỉ một vài bảng có ~ 25 triệu hàng. Không có trường lớn varchar (lớn nhất là 300, hầu hết là ít hơn varchar (50).Không phải bảng rất rộng < 20 cột.Ngoài ra, không có bảng lớn được lập chỉ mục nào được nêu ra.Những bảng với các chỉ mục có ít hơn 1 triệu hàng. t sử dụng char, chỉ varchar cho chuỗi Datatype không phải là vấn đề

Hóa ra đó là tệp nhật ký, chứ không phải tệp mdf. Tệp MDF thực sự là 24gigs có vẻ hợp lý hơn, tuy nhiên vẫn là IMHO lớn

CẬP NHẬT:

Tôi đã khắc phục sự cố với tệp LDF (nhật ký) bằng cách thay đổi mô hình khôi phục từ ĐẦY ĐỦ thành đơn giản. Điều này là ổn vì máy chủ này chỉ được sử dụng để phát triển nội bộ và xử lý ETL. Ngoài ra, trước khi chuyển sang SIMPLE, tôi đã phải thu nhỏ tệp LOG. Tuy nhiên, việc thu hẹp không được khuyến nghị trong hầu hết các trường hợp, đây là một trong những trường hợp tệp nhật ký không bao giờ phát triển quá lớn và quá nhanh. Để đọc thêm, hãy xem this

Trả lời

3

Có thể có nhiều lý do có thể bạn đang sử dụng char (5000) thay vì varchar (5000), có thể bạn đang sử dụng bigints thay vì int, nvarchar khi tất cả những gì bạn cần là varchar v.v. v.v. Có thể bạn đang sử dụng rất nhiều chỉ mục cho mỗi bảng, tất cả những thứ này sẽ được thêm vào. Có thể cài đặt autogrow của bạn sai. Bạn chắc chắn đây là MDF và không phải là tập tin LDF phải không?

+0

Ngoài ra, hãy chú ý đến các yếu tố lấp đầy trên chỉ mục - Tôi đã gặp chỉ mục trên nhiều lần với hệ số lấp đầy 10% thay vì 90% dự định. :) –

+0

Ngoài ra, phân đoạn chỉ mục có thể là một yếu tố. http://www.sqlmag.com/article/tsql3/automatic-reindexing.aspx – David

+1

Tôi cảm thấy ngớ ngẩn. Đây là tệp nhật ký. –

4

Vì MDF được phân bổ với 154Gb hoặc đã phát triển đến 154Gb thông qua các hoạt động khác nhau. Tệp cơ sở dữ liệu có ít nhất ít nhất kích thước của dữ liệu trong đó, nhưng nó có thể lớn hơn số tiền đã sử dụng bởi bất kỳ số tiền nào.

Câu hỏi rõ ràng sẽ là cách bạn đo lượng dữ liệu trong cơ sở dữ liệu? Bạn đã sử dụng sp_spaceused? Bạn đã kiểm tra sys.allocation_units? Bạn có đoán không?

Nếu kích thước được sử dụng thực sự là 7Gb trong số 154Gb, thì bạn nên để nguyên như vậy. Cơ sở dữ liệu được kích thước bởi một ai đó ở kích thước này, hoặc đã phát triển, và nó có khả năng phát triển trở lại. Nếu bạn tin rằng sự tăng trưởng hoặc định cỡ trước là ngẫu nhiên, thì điểm trước đó vẫn được áp dụng và bạn nên để nó như cũ.

Nếu bạn hoàn toàn tích cực, việc phân bổ tổng thể là một sai lầm, bạn có thể thu nhỏ cơ sở dữ liệu, với tất cả các negative consequences of shrinking.

+0

Thông tin tốt. Tôi không phải là quản trị viên DB, nhưng tôi sẽ đọc một số điều này. Cảm ơn. –

0

AUTO SHRINK không được bật hoặc Kích thước ban đầu được đặt thành giá trị lớn hơn.

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