Cơ sở dữ liệu SQL Server 2017 Enterprise CU16 14.0.3076.1
Gần đây chúng tôi đã thử chuyển từ các công việc bảo trì Index Rebuild mặc định sang Ola Hallengren IndexOptimize
. Các công việc Index Rebuild mặc định đã chạy trong một vài tháng mà không có vấn đề gì, và các truy vấn và cập nhật đang hoạt động với thời gian thực hiện chấp nhận được. Sau khi chạy IndexOptimize
trên cơ sở dữ liệu:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
hiệu suất đã vô cùng xuống cấp. Một tuyên bố cập nhật mất 100ms trước đó IndexOptimize
mất 78.000ms sau đó (sử dụng một kế hoạch giống hệt nhau) và các truy vấn cũng đang thực hiện một số đơn đặt hàng có cường độ tồi tệ hơn.
Vì đây vẫn là một cơ sở dữ liệu thử nghiệm (chúng tôi đang di chuyển một hệ thống sản xuất từ Oracle), chúng tôi đã trở lại bản sao lưu và bị vô hiệu hóa IndexOptimize
và mọi thứ trở lại bình thường.
Tuy nhiên, chúng tôi muốn hiểu điều gì IndexOptimize
khác với "bình thường" Index Rebuild
có thể gây ra sự suy giảm hiệu suất cực đoan này để đảm bảo chúng tôi tránh được điều đó một khi chúng tôi đi vào sản xuất. Bất kỳ đề xuất về những gì cần tìm sẽ được đánh giá rất cao.
Kế hoạch thực hiện cho tuyên bố cập nhật khi nó chậm. tức là
sau khi IndexOptizing tối đa
kế hoạch thực hiện (sắp tới)
Tôi đã không thể nhận ra một sự khác biệt.
Lập kế hoạch cho cùng một truy vấn khi đó là kế hoạch thực hiện nhanh