Cài đặt dọn dẹp ma


10

Tôi đang chạy một cơ sở dữ liệu giao dịch cao (trung bình ~ 175k giao dịch / phút, gần 9 triệu bản ghi mỗi giờ được thêm và xóa)

Cho đến gần đây, điều này không phải là vấn đề quá lớn vì chúng tôi đã có ~ 7,5 triệu bản ghi được thêm và xóa nhưng với luồng dữ liệu mới nhất, việc dọn dẹp ma dường như không thể theo kịp việc dọn dẹp không gian không sử dụng trên bảng / chỉ mục.

Vài ngày trước, chúng tôi đã đạt tới 53 GB 'Không gian chưa sử dụng' trên 16 bảng (chủ yếu là 2 bàn), do đó, bắt đầu xem xét quá trình dọn dẹp ma để thấy nó chạy cứ sau 5 giây và chạy trên 10 trang.

Giải pháp hiện tại của tôi là sáng sớm tôi đang chạy ba luồng lệnh sau:

DECLARE @2hours datetime = dateadd(hour,2,getutcdate())

WHILE getutcdate() < @2hours
BEGIN
    DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH  NO_INFOMSGS
END

để bắt kịp với các hồ sơ tồn đọng từ đêm hôm trước (khi hầu hết các lần xóa của chúng tôi diễn ra)

Tôi tự hỏi liệu có cách nào để thay đổi cài đặt mặc định từ 5 giây và 10 trang để nói mỗi giây hoặc chạy hơn 20 trang không, có cách nào để làm điều đó hay tôi nên tiếp tục quay vòng nhiều chương trình dọn dẹp để xóa dữ liệu hoặc nếu có bất kỳ hành động nào khác có thể hỗ trợ việc này

Lập chỉ mục lại chạy trên hầu hết các chỉ số bị ảnh hưởng ít nhất một lần một tuần (hầu hết là mỗi ngày)

SQL Server 2012 Enterprise SP3_CU8 (nâng cấp lên CU9 vào ngày mai) trên cụm Luôn sẵn sàng cao có sẵn với bản sao (phân phối trên một máy chủ riêng biệt)

Câu trả lời:


4

Tôi tự hỏi liệu có cách nào để thay đổi cài đặt mặc định từ 5 giây và 10 trang để nói mỗi giây hoặc chạy hơn 20 trang

Không có không có. Hiện tại tôi không biết :-)

nếu có bất kỳ hành động nào khác có thể hỗ trợ việc này

Từ blog của Paul Randal - Một phương pháp đôi khi mọi người cân nhắc là buộc dọn dẹp ma để dọn dẹp mọi thứ bằng cách thực hiện quét bảng hoặc quét chỉ mục (do đó xếp hàng tất cả các bản ghi đã xóa cho nhiệm vụ dọn dẹp ma).

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

Có khả năng để bạn phân vùng bảng và xóa phân vùng cũ thay vì xóa không? FYI .. SQL Server 2016 trở lên cho phép bạn cắt bớt các phân vùng riêng lẻ.

Ngoài ra, bạn có thể (KIỂM TRA và triển khai) - vô hiệu hóa dọn dẹp ma (cờ theo dõi 661) và sau đó rebuild index WITH ONLINE = ONtùy chọn vì bạn đang sử dụng phiên bản Enterprise.

Nếu bạn đang sử dụng Luôn luôn (với async) với sao chép, hãy đảm bảo bật cờ Trace 1448 - cho phép trình đọc nhật ký sao chép di chuyển về phía trước ngay cả khi các bản sao thứ cấp không đồng bộ không thừa nhận việc nhận thay đổi.

Đảm bảo đọc Xóa các trang phân tách và bóng ma được chuyển tiếp từ Paul White để xem các bảng của bạn có kích hoạt hoặc các cột LOB sẽ chậm lại không.

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.