Kami memiliki beberapa database dengan fragmentasi indeks> 95%. Yang terbaik yang bisa saya katakan adalah indeks tidak pernah dibangun kembali apalagi direorganisasi. Bertahun-tahun.
(Dalam keadilan, tabel ini tampaknya memiliki statistik yang diperbarui secara otomatis diaktifkan. Juga dalam keadilan, ia rajin tentang cadangan: harian penuh dan trx log setiap jam.)
Ketika saya bertanya, DBA mengatakan dia enggan untuk membangun kembali atau memperbarui indeks. Ketika saya bertanya mengapa, dia tidak bisa mengartikulasikannya. Akhirnya dia berkata dia khawatir tentang kehilangan data potensial. Misalnya salah satu database digunakan oleh aplikasi akuntansi Great Plains Dynamics kami, dan dia tampak sangat cemas tentang itu.
Saya bukan seorang DBA tetapi dari apa yang saya baca, kegelisahannya tampaknya ... sulit untuk saya pahami.
Saya tidak yakin apa yang harus dilakukan selanjutnya. Saran bagaimana saya harus melanjutkan?
sumber
Jawaban:
Membangun kembali indeks database tidak boleh menyebabkan kehilangan data. Namun itu mungkin akan menyebabkan penurunan kinerja yang substansial karena indeks yang dibangun kembali biasanya tidak akan tersedia untuk digunakan sampai pembangunan kembali selesai. Untuk alasan itu harus dilakukan selama jam-jam ketika sistem yang terpengaruh menganggur.
Paranoia adalah Hal yang Baik dalam DBA - Jika mereka khawatir tentang kehilangan data, saya ingin mereka melakukan tes cadangan yang benar (kembalikan ke sistem yang terpisah dan pastikan semua data ada di sana), dan jika mereka masih khawatir kemudian melakukan pencadangan penuh sebelum membangun kembali indeks akan menjadi tindakan pencegahan yang wajar untuk dilakukan.
sumber
WITH (ONLINE=ON)
selama indeks tidak mengandung kolom BLOB.REINDEX
sebagai "pemeliharaan preventif" pada tabel di mana isi indeks banyak berubah cukup cantik umum dalam pengalaman saya (jika sebagian besar indeks statis itu kurang dari satu hal)Tidak ada risiko kehilangan data dari pembangunan kembali atau defragging indeks.
sumber
Mengatur ulang indeks akan memakan waktu lebih sedikit, dan lebih sedikit upaya dari server SQL sehingga mereka dapat dilakukan dalam jenis contoh hari kerja. Jika apa yang Anda katakan itu benar, bahkan mengatur ulang indeks yang belum pernah ada, dapat menyebabkan dampak yang lebih besar pada server juga. Membangun kembali indeks akan mengambil banyak upaya dari server SQL sejak mereka dijatuhkan dan dibangun kembali. Melakukan pembangunan kembali pada hari kerja tidak sebanding dengan risiko server sibuk dengan indeks dan tidak melayani orang yang menggunakannya.
Saya setuju dengan voretaq7, jika dia khawatir bekerja dengan indeks, coba pada pengembangan atau uji server terlebih dahulu untuk melihat bagaimana reaksinya.
sumber
DROP INDEX
dan ulangCREATE INDEX
- Saya tidak yakin tentang SQL Server, tapi saya tahu PostgreSQL kadang-kadang lebih baik meniup indeks dan mulai dari awal daripada mencoba membangun kembali (REINDEX
) itu.