Thu hẹp cơ sở dữ liệu sau khi thả bảng?


7

Tôi đã có một bảng với hơn 70 triệu bản ghi trong cơ sở dữ liệu SQL Server, tôi đã bỏ bảng đó (một lần duy nhất) để giải phóng không gian trên đĩa, nhưng có vẻ như kích thước không thay đổi nhiều. Tôi thấy rằng tôi có thể thu nhỏ db đến mức tối thiểu.

Đó có phải là cách để làm điều đó?

Lần cuối cùng tôi thực hiện thu nhỏ bằng SQL Server Management Studio, phải mất vài giờ để hoàn thành. Có cách nào nhanh hơn không?

nhập mô tả hình ảnh ở đây

Câu trả lời:


10

Việc bỏ một bảng sẽ giải phóng không gian trong cơ sở dữ liệu, nhưng sẽ không giải phóng không gian trở lại Windows. Điều đó đòi hỏi phải thu hẹp tệp cơ sở dữ liệu. Tuy nhiên, chúng tôi không muốn tập tin cơ sở dữ liệu đầy đủ. Chúng tôi muốn có nhiều không gian trống để khi chúng tôi tải thêm dữ liệu, chúng tôi không phải phát triển tệp dữ liệu thường xuyên. Điều này gây ra sự phân mảnh của tệp dữ liệu trên các đĩa vật lý.

Đối với việc thu nhỏ nhanh hơn, không có cách nào để làm cho nó nhanh hơn. Thu hẹp cơ sở dữ liệu yêu cầu đọc và ghi lại hầu hết dữ liệu trong cơ sở dữ liệu để tất cả khoảng trắng có thể được giải phóng từ tệp cơ sở dữ liệu trở lại HĐH. Tất cả IO này mất thời gian và gây ra nhiều vấn đề phân mảnh.


7

Bạn sẽ muốn đọc về DBCC SHRINKFILE rất cẩn thận.

http://technet.microsoft.com/en-us/l Library / ms189493.aspx

Nói chung, bạn không muốn thu nhỏ cơ sở dữ liệu của mình đến kích thước nhỏ nhất có thể trên đĩa. Bạn muốn rời khỏi SQL Server với nhiều không gian để nó không phải tự động phát triển nhiều. Câu trả lời ở đây có rất nhiều thông tin hữu ích:

/programming/4522719/to-dbcc-shrinkdatabase-or-not-to-dbcc-shrinkdatabase-thats-the-question


cảm ơn vì thông tin đó mối quan tâm chính của tôi là kích thước sao lưu. sao lưu sẽ nhỏ hơn bây giờ sau khi thả bảng?
Ezi

1
Vâng chắc chắn. Ngoài ra, nếu bạn có SQL 2008+, hãy kiểm tra nén sao lưu. Thật dễ dàng và tôi đã nhận được kết quả thực sự tốt từ nó.

-2

Shrink là thủ tục khá tốn kém và có thể mất nhiều giờ. Để sử dụng không gian một cách hiệu quả nhất, bạn có thể chuyển các bảng thành nhóm mới với các chỉ mục được nhóm trước và thả trước đó. Cá nhân tôi thích điều này bởi vì nó dễ dàng thực hiện việc "thu nhỏ" này theo nhiều bước và dễ dự đoán hơn - do đó dễ lập kế hoạch hơn. Khi bạn bắt đầu DBCC SHRINK, bạn không biết sẽ mất bao nhiêu thời gian.

Cập nhật (Cảm ơn mrdennny đã chỉ ra điều đó): đây là một cách tiếp cận rất cụ thể và chỉ có thể được sử dụng nếu bạn có cơ sở dữ liệu chỉ đọc (như kho dữ liệu) vì trong khi sao chép dữ liệu sang bảng khác, không được phép ghi vào bảng này cho vì sự nhất quán Để tiết kiệm thời gian và đạt được hiệu suất tối đa của nó, bạn có thể chuyển cơ sở dữ liệu sang mô hình khôi phục SIMPLE và sử dụng gợi ý TABLOCK - điều này sẽ cho phép hệ thống sử dụng ghi nhật ký tối thiểu và thực hiện ít ghi hơn vào nhật ký giao dịch.


Làm thế nào chính xác để bạn tiền xử lý một chỉ mục được nhóm trên một nhóm tệp khác? Bạn chỉ có thể có một chỉ mục được phân cụm cho mỗi bảng và những gì đã bao giờ phân nhóm chỉ mục được phân cụm là trong đó bảng là chỉ mục được phân cụm là bảng.
mrdenny

Chà, có lẽ bạn đã hiểu nhầm tôi - ý tôi không phải là tạo ra chỉ mục cụm mới trên cùng một bảng - tất nhiên là không thể. Tôi có nghĩa là tạo ra một nhóm hoàn toàn mới, một bảng mới ở đó và di chuyển dữ liệu vào đó. Sau đó chỉ cần thả bàn cũ. sqlskills.com/bloss/paul/post/ ( Tạo lập chỉ mục cụm trên bảng mới trước đó cho phép chỉ có dung lượng đó, dữ liệu đó tiêu thụ, nhưng làm chậm tải dữ liệu, tất nhiên.
Vlad Ogay

Từ một điểm nhất quán sẽ là một cơn ác mộng. Bạn sẽ có ứng dụng ghi dữ liệu vào bảng cũ, trong khi bạn đang bận ghi vào bảng mới. Nếu bạn muốn di chuyển các bảng sang một nhóm tệp khác, chỉ cần thực hiện ALTER trên chỉ mục được nhóm và thay đổi nhóm tệp được lưu trữ. SQL sẽ xây dựng lại nó trong nhóm tệp mới. Nếu được thực hiện trực tuyến, không có sự cố nào đối với ứng dụng. Đây là tất cả khá quyết liệt chỉ để thu nhỏ một tập tin.
mrdenny

Vâng, tác giả đã không nói bất cứ điều gì về văn bản nhưng ông nói đó chỉ là một lần. Điều tôi đang nói là một bảng chỉ đọc trong kho dữ liệu và ở đó bạn thường tải dữ liệu hiếm khi. Đó có lẽ không phải là trường hợp của tác giả, tôi đồng ý, nhưng việc xây dựng lại THAY ĐỔI đòi hỏi phải có thêm dung lượng đĩa, cuối cùng cũng sẽ phải giải phóng - phải không? Trực tuyến làm chậm quá trình này nếu chúng ta muốn nó cũng được thực hiện nhanh chóng trong một cửa sổ thời gian. Nếu bạn có thể chuyển cơ sở dữ liệu thành mô hình khôi phục đơn giản và thực hiện các chuyển này trong chế độ BULK INSERT - giúp bạn tiết kiệm thời gian.
Vlad Ogay

Thực hiện ALTER vào một nhóm tệp khác sẽ có cùng dung lượng như ghi dữ liệu vào bảng mới. Có, hoạt động trực tuyến mất nhiều thời gian hơn một chút, nhưng hệ thống hoạt động và chạy toàn bộ thời gian. Khi hoạt động có thể mất nhiều ngày, không có gì giống như làm việc trong một cửa sổ bảo trì. Ngoài ra, có một vấn đề là nếu có khóa ngoại sử dụng bảng này với tư cách là cha mẹ có thể cần được giải quyết. Việc xây dựng lại thành một nhóm tập tin khác sẽ không để lại dữ liệu nào được dọn sạch. Trong mọi trường hợp, đây không phải là một kỹ thuật tôi từng giới thiệu cho khách hàng.
mrdenny

-2

Kiểm tra bài viết này: http://itledgeledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/

"Giải pháp mà chúng tôi đưa ra thực sự khá đơn giản. Xóa cơ sở dữ liệu như bình thường. Sau đó, sao lưu và khôi phục cơ sở dữ liệu. Sau đó, thu nhỏ lại, tiếp theo là xây dựng lại các chỉ mục được nhóm để khắc phục sự cố phân mảnh mà thu nhỏ sẽ giới thiệu . "


Một thu nhỏ theo sau là xây dựng lại chỉ mục cụm sẽ làm nở lại cơ sở dữ liệu. Cơ sở dữ liệu có nghĩa là để phát triển, bạn chỉ cần lập kế hoạch phát triển bao nhiêu (autogrowth). Ngoài ra, bạn sẽ đạt được gì khi thực hiện thu nhỏ và lấy lại một số hợp đồng biểu diễn, nếu cơ sở dữ liệu sẽ phát triển trở lại kích thước đó?
Kin Shah
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.