Chúng tôi đang xây dựng một kho dữ liệu ban đầu sẽ là 1 TB và sẽ tăng khoảng 20gigs mỗi tháng.
Đối với các bảng nhất định, chúng tôi đang thực hiện các quy trình ETL hàng ngày và các bảng khác chúng tôi đang thực hiện hàng tuần / hàng tháng.
Khi có một nhập dữ liệu đi vào một bảng, có cần thiết phải bỏ và tạo lại các chỉ mục không?
Có bao giờ có một điểm để giảm và tạo lại các chỉ mục hoặc chúng được tự động cập nhật?
Các số liệu thống kê được thiết lập để cập nhật tự động.
Cảm ơn bạn rất nhiều vì sự giúp đỡ và hướng dẫn của bạn.
Tôi có kịch bản thiên tài này:
SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +
CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END +
CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + cast(ps.partition_number as nvarchar(max)) ELSE '' END
FROM sys.indexes AS ix INNER JOIN sys.tables t
ON t.object_id = ix.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
INNER JOIN (SELECT object_id, index_id, avg_fragmentation_in_percent, partition_number
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)) ps
ON t.object_id = ps.object_id AND ix.index_id = ps.index_id
INNER JOIN (SELECT object_id, index_id, COUNT(DISTINCT partition_number) AS partition_count
FROM sys.partitions
GROUP BY object_id, index_id) pc
ON t.object_id = pc.object_id AND ix.index_id = pc.index_id
WHERE ps.avg_fragmentation_in_percent > 10 AND
ix.name IS NOT NULL
từ đây:
http://weblogs.asp.net/okloeten/archive/2009/01/05/6819737.aspx
Bạn có đề nghị tôi chạy tập lệnh này hàng ngày và dựa trên những phát hiện chạy mã được tạo không?