Database SQL Server 2017 Enterprise CU16 14.0.3076.1
Kami baru-baru ini mencoba beralih dari pekerjaan pemeliharaan Index Rebuild default ke Ola Hallengren IndexOptimize
. Pekerjaan Rebuild Index default telah berjalan selama beberapa bulan tanpa masalah, dan pertanyaan dan pembaruan bekerja dengan waktu eksekusi yang dapat diterima. Setelah berjalan IndexOptimize
di database:
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'
kinerja sangat menurun. Pernyataan pembaruan yang mengambil 100 IndexOptimize
ms sebelum mengambil 78.000 ms sesudahnya (menggunakan rencana yang identik), dan kueri juga melakukan beberapa pesanan yang jauh lebih buruk.
Karena ini masih merupakan basis data pengujian (kami memigrasikan sistem produksi dari Oracle), kami kembali ke cadangan dan dinonaktifkan IndexOptimize
dan semuanya kembali normal.
Namun, kami ingin memahami apa yang IndexOptimize
berbeda dari "normal" Index Rebuild
yang dapat menyebabkan penurunan kinerja yang ekstrem ini untuk memastikan kami menghindarinya begitu kami mulai berproduksi. Setiap saran tentang apa yang harus dicari akan sangat dihargai.
Rencana eksekusi untuk pernyataan pembaruan saat lambat. yaitu
Setelah IndexOptimasi
rencana eksekusi Aktual (segera hadir)
Saya belum dapat menemukan perbedaan.
Rencanakan untuk permintaan yang sama ketika itu adalah rencana eksekusi yang cepat