Mengapa kita perlu membangun kembali dan mengatur ulang Indeks dalam SQL Server

28

Setelah mencari di internet saya tidak dapat menemukan alasannya

  1. Mengapa kita perlu membangun kembali dan mengatur ulang indeks di SQL Server?

  2. apa yang terjadi secara internal ketika kita membangun kembali dan mengatur ulang?

Sebuah artikel di situs mengatakan:

Indeks harus dibangun kembali ketika fragmentasi indeks lebih dari 40%. Indeks harus ditata ulang ketika fragmentasi indeks antara 10% hingga 40%. Proses pembangunan kembali indeks menggunakan lebih banyak CPU dan mengunci sumber daya basis data. Versi pengembangan SQL Server dan versi Perusahaan memiliki opsi ONLINE, yang dapat dihidupkan ketika Indeks dibangun kembali. Opsi ONLINE akan menjaga indeks tersedia selama pembangunan kembali.

Saya tidak dapat memahami ini, meskipun dikatakan WHENuntuk melakukan ini, tetapi saya ingin tahu WHYapakah kita perlu membangun kembali dan mengatur ulang indeks?

Mourya
sumber
1
Ini adalah pertanyaan tentang mengapa, dan inilah pertanyaan tentang kapan .
Nick Chammas

Jawaban:

29

Saat Anda melakukan pembaruan dan penghapusan sisipan, indeks Anda akan menjadi terfragmentasi baik secara internal maupun eksternal.

Fragmentasi internal adalah Anda memiliki persentase tinggi ruang kosong pada halaman indeks Anda, artinya SQL Server perlu membaca lebih banyak halaman saat memindai indeks.

Fragmentasi eksternal adalah ketika halaman indeks tidak dalam urutan lagi, sehingga SQL Server harus melakukan lebih banyak pekerjaan, terutama dalam hal IO untuk membaca indeks.

Jika indeks Anda menjadi terlalu terfragmentasi, paling-paling, kueri Anda akan kurang efisien tetapi paling buruk, SQL Server hanya akan berhenti menggunakan indeks secara bersamaan, artinya hampir semua kueri harus melakukan pemindaian tabel atau pemindaian indeks berkerumun. Ini akan sangat merusak kinerja Anda!

Ketika Anda mengatur ulang indeks, maka SQL Server menggunakan halaman indeks yang ada dan hanya mengacak data pada usia tersebut. Ini akan mengurangi fragmentasi internal dan juga dapat menghilangkan sejumlah kecil fragmentasi eksternal. Ini adalah operasi yang lebih ringan daripada membangun kembali dan selalu online.

Ketika Anda membangun kembali indeks, SQL Server sebenarnya menggunakan data indeks dan menggunakan kumpulan halaman indeks yang baru. Ini jelas akan mengurangi fragmentasi internal dan eksternal tetapi merupakan operasi yang lebih berat dan secara default menyebabkan indeks untuk offline, meskipun dapat dilakukan sebagai operasi online, tergantung pada versi dan pengaturan SQL Server Anda.

Harap jangan berharap memiliki 0 fragmentasi setelah Rebuild. Kecuali Anda menggunakan petunjuk permintaan MAXDOP, SQL Server akan memparalelkan operasi pembangunan kembali dan semakin banyak prosesor yang terlibat, semakin besar kemungkinan terjadi fragmentasi, karena setiap prosesor atau inti, akan membangun kembali bagian atau fragmen indeks secara terpisah, tanpa memperhatikan satu sama lain. Ini adalah pertukaran antara tingkat fragmentasi terbaik dan waktu yang dibutuhkan untuk membangun kembali indeks. Untuk fragmentasi mendekati 0, gunakan MAXDOP 1 dan urutkan hasilnya di TempDB.

Pete Carter
sumber
Besar...! Cukup jelaskan ...!
DineshDB
0

Untuk menghapus fragmentasi yang menyebabkan masalah seperti keterlambatan tingkat basis data / permintaan lama, dll.

Untuk mendapatkan pemahaman terperinci tentang fragmentasi dan bagaimana membangun kembali dan mengatur ulang indeks (atau mengatur ulang halaman indeks) bekerja untuk tautan referensi di bawah ini: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation

Shiwangini Shishulkar
sumber
1
Informasi ini telah menjadi (sebagian) usang setelah melihat Mengapa Indeks Fragmentasi Tidak
Menjadi