2008-09-05 24 views
6

Tôi có cơ sở dữ liệu sql ms phát triển rất lớn. Khi kiểm tra tôi thấy rằng có một loạt các không gian không sử dụng trong một số bảng. Tôi không thực hiện nhiều lần xóa vật lý, vì vậy tôi không nghĩ rằng các bản ghi vừa bị xóa của nó. DBCC SHRINK không làm cho tệp nhỏ hơn. Nhưng, nếu tôi đổ bảng vào cơ sở dữ liệu mới, trống, kích thước sẽ giảm khoảng 80%. Thay vì 7gb tôi có trong bảng này trong cơ sở dữ liệu hiện tại, tôi kết thúc với khoảng 1,5 GB trong cơ sở dữ liệu mới. Nó giống như máy chủ sql phân bổ quá nhiều bộ nhớ. Bất cứ ai gặp phải điều này trước đây? Tôi muốn để có thể thu nhỏ bảng bằng cách loại bỏ không gian được phân bổ không sử dụng mà không cần phải tạo một cơ sở dữ liệu hoàn toàn mới.SQL Server không được sử dụng, nhưng không gian bảng được phân bổ

Thông tin bổ sung:

Mô hình khôi phục đầy đủ được sử dụng. Tôi sẽ cố gắng xây dựng lại các chỉ số, tôi nghĩ rằng nó đã được một thời gian. Ldf's được thu nhỏ hàng ngày bằng cách sử dụng một số proc lưu trữ wacky mà cắt ngắn chúng.

+0

Hoàn toàn KHÔNG CÓ ĐIỂM ở tất cả trong việc sử dụng mô hình khôi phục đầy đủ, nếu tất cả những gì bạn đang làm cho các LDF đang cắt xén chúng! Cách thích hợp để làm cho chúng co lại là sao lưu các tệp nhật ký, tại thời điểm đó chúng sẽ bị thu hẹp tự động. Một người hiểu chuỗi đăng nhập và chiến lược sao lưu thích hợp là rất cần thiết để bước vào và giúp bạn làm cho nó đúng. Bất cứ điều gì ít đặt bạn tại ** nguy cơ nghiêm trọng mất dữ liệu **. – ErikE

+0

Đây có phải là thích hợp không? KB bài viết 924027 - [SQL Server làm tăng đáng kể không gian không sử dụng cho một số bảng] (http://support.microsoft.com/kb/924947) –

+0

Hãy xem bài viết Cơ sở Kiến thức này và xem nó có áp dụng không: http://support.microsoft.com/kb/913399 –

Trả lời

0

Trong các tùy chọn, bạn có thể chỉ định số lượng bạn muốn phát triển. Theo mặc định tôi tin rằng đó là 10%, do đó, cho một cơ sở dữ liệu 200MB, khi bạn điền vào trang cuối cùng của bạn, nó sẽ phân bổ 20MB không gian trang khác. Tại 7GB nó sẽ phân bổ 700MB.

Tôi không biết chính xác nơi bạn có thể sửa đổi nó sau khi bạn tạo một db, nhưng tôi biết nó có nó khi bạn tạo db. một công việc nhỏ của google rất có thể sẽ tiết lộ câu trả lời cho bạn.

LƯU Ý: câu trả lời của tôi không phải là cách khắc phục, nhưng có thể là cách ngăn chặn/giải thích lý do tại sao bạn có thể thấy tất cả không gian chưa được phân bổ này.

2

Tôi nhận thấy rằng nếu bạn không quan tâm đến việc sao lưu tệp nhật ký transistion (LDF), bạn sẽ nhận được một hành vi như thế này. Tôi không thể nhấn mạnh đủ tầm quan trọng của việc sao lưu tốt "vệ sinh". Không chỉ nó sẽ tiết kiệm thịt xông khói của bạn nếu có điều gì sai trái nhưng tôi cũng sẽ giúp duy trì một cơ sở dữ liệu chặt chẽ tốt đẹp.

+0

Đồng ý, không bao giờ quên sao lưu nhật ký giao dịch cũng như sao lưu cơ sở dữ liệu. Nhật ký sẽ phát triển cho đến khi nó ăn toàn bộ ổ đĩa cứng của bạn. – HLGEM

1

tôi không làm nhiều vật lý xóa

gì về bản cập nhật của bảng, là những gì các mức độ phân mảnh. chạy DBCC SHOWCONTIG, sau đó xây dựng lại chỉ mục nếu nó bị phân mảnh cao. Sau đó làm một BACKUP LOG VỚI TRUNCATE_ONLY theo sau là một lệnh teo

0

này đã làm việc cho tôi trong quá khứ

USE [DBNAME] 
GO 

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY) 

GO 
0

Tôi đã có một vấn đề tương tự một lần và tôi tin rằng tôi thấy rằng reindex/thu hẹp didn' t đòi lại tất cả không gian chưa sử dụng nếu không có chỉ số nhóm trên một bảng đã cho.

0

Có thể bảng được xây dựng với đệm được bật cho chỉ mục. Lý do mà mọi người xây dựng một chỉ mục đệm là để ngăn chặn việc chia tách trang.

Nhấp chuột phải vào bảng trong Trình quản lý SQL và chọn SCRIPT TABLE. Sau đó xem xét xem PAD_INDEX=OFF. Nếu PAD_INDEX đang được sử dụng, đó có thể là nơi bảng đang chiếm dung lượng.

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