Tôi đang nghiên cứu cơ sở dữ liệu chống phân mảnh và có vẻ như câu lệnh SQL sau đây là thứ tôi đang tìm kiếm:
ALTER INDEX ALL ON mytablename
REBUILD WITH(ONLINE = ON)
Khi tôi lấy thông tin từ đó sys.dm_db_index_physical_stats
, tôi thấy phần trăm rất cao - 70, 80 và 90 phần trăm (!). Vì vậy, nó cho tôi biết tôi muốn một REBUILD
, và không a REORGANIZE
.
Tôi có một vài câu hỏi trước khi thực hiện những điều này REBUILDS
.
- Nó có thể được chạy trong khi các quy trình đang sử dụng cơ sở dữ liệu? (
ONLINE = ON
nói với tôi là có, nhưng tôi muốn xác nhận rằng nó sẽ không gặp sự cố gì.) Hoặc tốt hơn là chạy khi không sử dụng? - Tôi đọc
REBUILD
làm cho mọi thứ chạy chậm hơn. Có phải đó chỉ là trong khi các chỉ mục đang được xây dựng lại? (hoặc mãi mãi về sau) - Sẽ mất bao lâu để xây dựng lại tất cả các chỉ mục / hay đúng hơn là mỗi chỉ số?
- Có bất kỳ tác dụng phụ hoặc thông tin khác mà tôi cần phải biết? Đây là cơ sở dữ liệu sản xuất / trực tiếp.
EDIT: Và cuối cùng, cách tốt nhất để xây dựng lại nó là gì? Vòng qua tất cả các đối tượng có tỷ lệ phần trăm lớn hơn 30? Hoặc là?
Cảm ơn bạn!
4
Lưu ý rằng các hoạt động chỉ mục trực tuyến yêu cầu Phiên bản doanh nghiệp của SQL Server.
—
Joe Stefanelli
Cách duy nhất để biết sẽ mất bao lâu là sao chép cơ sở dữ liệu vào một máy chủ tương tự (cùng cấu hình phần cứng) và chạy xây dựng lại ở đó.
—
datagod