Kapan saya harus membangun kembali indeks dalam database relasional (SQL Server) saya?
Apakah ada kasus untuk membangun kembali indeks secara teratur?
sql-server
index-maintenance
Nick Chammas
sumber
sumber
Jawaban:
Dengan risiko terlalu umum dalam jawaban saya, saya akan mengatakan bahwa Anda harus menjalankan proses pemeliharaan indeks secara teratur. Namun, proses pemeliharaan indeks Anda hanya akan membangun kembali / mengatur ulang indeks yang secara spesifik memerlukannya.
Ini menimbulkan pertanyaan: kapan indeks perlu dibangun kembali atau ditata ulang? Rolando menyentuh ini dengan baik. Sekali lagi, saya berisiko menjadi sangat luas. Indeks memerlukan pemeliharaan ketika tingkat fragmentasi mempengaruhi kinerja. Tingkat fragmentasi ini dapat bervariasi berdasarkan ukuran dan komposisi indeks.
Berbicara untuk SQL Server, saya cenderung memilih ukuran indeks dan tingkat indeks fragmentasi di mana saya mulai melakukan pemeliharaan indeks. Jika indeks berisi kurang dari 100 halaman, saya tidak akan melakukan pemeliharaan.
Jika indeks antara 10% dan 30% terfragmentasi, saya akan
REORGANIZE
indeks danUPDATE
statistik. Jika indeks lebih dari 30% terfragmentasi, saya akanREBUILD
indeks - tanpaUPDATE STATISTICS
, karena ini diurus olehREBUILD
. Ingat juga bahwa pembangunan kembali hanya memperbarui objek statistik yang secara langsung terkait dengan indeks. Statistik kolom lainnya perlu dipelihara secara terpisah.Jawaban ini benar-benar hanya jauh untuk mengatakan: Ya, Anda harus melakukan pemeliharaan indeks rutin, tetapi hanya pada indeks yang membutuhkannya.
sumber
Anda harus membangun kembali indeks ketika mereka menjadi sangat terfragmentasi oleh acara khusus. Misalnya, Anda melakukan beban data yang besar dan besar ke dalam tabel yang diindeks.
Jadi bagaimana jika indeks Anda menjadi terfragmentasi secara teratur karena aktivitas rutin? Haruskah Anda menjadwalkan pembangunan kembali reguler? Seberapa sering mereka harus berlari?
Tom Kyte , dalam utas Ask Tom klasik ini , merekomendasikan:
Logikanya di sini adalah suara, tetapi bias terhadap profil beban baca-berat.
Indeks "gemuk" (yaitu indeks dengan banyak celah) memang menyimpan cukup banyak ruang untuk baris baru dan yang dipindahkan, sehingga mengurangi pemisahan halaman dan menjaga kecepatan penulisan Anda. Namun, ketika Anda membaca dari indeks lemak itu Anda harus membaca lebih banyak halaman untuk mendapatkan data yang sama karena Anda sekarang menyaring lebih banyak ruang kosong. Ini memperlambat bacaan Anda.
Jadi, dalam basis data baca-berat Anda ingin membangun kembali secara teratur atau mengatur ulang indeks Anda. (Seberapa sering dan dalam kondisi apa? Matt M sudah memiliki jawaban konkret untuk pertanyaan ini.) Dalam database yang mengalami aktivitas membaca dan menulis yang kira-kira setara, atau dalam database yang berat, Anda mungkin merusak kinerja database Anda dengan membangun kembali indeks. secara teratur.
sumber
Kebanyakan orang membangunnya kembali secara teratur sehingga mereka tidak pernah terpecah-pecah. Ketika Anda perlu membangunnya kembali didasarkan pada seberapa cepat mereka terfragmentasi. Beberapa indeks perlu sering dibangun kembali, yang lain pada dasarnya tidak pernah. Lihatlah skrip yang SQLFool kumpulkan yang menangani banyak hal untuk Anda.
sumber
Seperti dicatat dalam jawaban yang diterima dari Matt M, aturan umum adalah bahwa indeks yang lebih dari 30% terfragmentasi harus dibangun kembali.
Kueri ini akan membantu Anda menemukan berapa banyak indeks yang Anda miliki yang lebih dari 30% terfragmentasi (ketika Anda memilikinya, Anda harus membangunnya kembali):
sumber
Ketika persentase indeks fragmentasi lebih dari 30%.
Tidak ada kasus seperti itu, tetapi secara umum, melakukan Pemeliharaan Indeks seminggu sekali, selama akhir pekan adalah praktik terbaik untuk menjaga stabilitas lingkungan.
Saya akan merekomendasikan menggunakan skrip pemeliharaan dari Ola Hallengren (skrip pemeliharaan terbaik), menyesuaikan skrip berdasarkan lingkungan Anda dan menjadwalkannya untuk dijalankan selama akhir pekan.
https://ola.hallengren.com/
Catatan: Jangan lupa memperbarui statistik setelah membangun kembali indeks, karena indeks pembangunan kembali tidak memperbarui semua statistik.
sumber
Seperti kebanyakan hal di TI, itu tergantung. Masalah apa yang Anda coba perbaiki dengan melakukan indeks pembangunan kembali? Dapatkah Anda menunjukkan bahwa itu benar-benar memperbaiki masalah? Jika demikian, maka sesuaikan angka hingga Anda menemukan jumlah perawatan paling sedikit yang perlu Anda lakukan untuk memperbaiki masalah.
Jika itu tidak memperbaiki masalah, atau alasan Anda melakukannya adalah hanya untuk menenangkan beberapa metrik yang Anda pantau karena mungkin membuat segalanya lebih baik, maka semua yang Anda lakukan adalah membakar CPU dan IO dan mungkin membuat masalah Anda lebih buruk.
Ada argumen bahwa memperbaiki fragmentasi tidak akan membuat perbedaan pada server Anda, jadi apakah itu layak dilakukan secara teratur?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag
sumber