Nilai yang benar untuk faktor pengisian untuk indeks berkerumun dengan kunci identitas pengganti

8

Saya memiliki tabel besar yang memiliki indeks berkerumun dengan kunci utama identitas. Saya memutuskan nilai yang benar untuk faktor pengisian tabel ini untuk meminimalkan pemisahan halaman. Kami menjaga indeks menggunakan skrip yang dijalankan setiap hari yang mengukur fragmentasi dan mengambil tindakan yang sesuai. Tabel berisi kolom panjang variabel.

Pikiran pertama saya adalah menetapkannya pada 100 (karena catatan hanya boleh ditulis pada akhir tabel) tetapi saya berasumsi bahwa perubahan pada kolom panjang variabel juga dapat menyebabkan pemisahan halaman, jadi saya sekarang beralih ke 90.

Setiap saran dihargai.

SuperCoolMoss
sumber

Jawaban:

6

Tergantung

Itu tindakan penyeimbangan. Jika tabel Anda intensif membaca, dengan tidak banyak pembaruan atau penghapusan maka default (yang 100) harusnya ok.

Jika tabel Anda sangat intensif, dengan banyak pembaruan, maka nilai di bawah 80 mungkin lebih tepat.

Tidak ada formula ajaib untuk hal ini. (AFAIK, jika ada tolong beri tahu saya) Hal terbaik yang harus dilakukan adalah memiliki lingkungan pengujian, memiliki beberapa beban kerja untuk diuji. Buat perubahan & lihat bagaimana kinerja database Anda dengan beban kerja.

Nick Kavadias
sumber
8

Nick benar.

Jika Anda melakukan pembaruan yang meningkatkan ukuran catatan pada halaman yang dikemas, maka Anda akan menyebabkan pemisahan halaman, tetapi selain itu, dengan kunci primer identitas tidak ada yang akan menyebabkan pemisahan halaman dalam indeks berkerumun.

(Meskipun mengatakan itu, ada 5 jenis pemisahan halaman yang dapat dilakukan oleh Storage Engine, dan tidak semuanya menyebabkan fragmentasi dan pergerakan data - yang Anda dapatkan saat menyisipkan nilai identitas yang meningkat secara monoton adalah pemisahan halaman akhir. Tetapi Saya ngelantur ...)

Saya telah membantu banyak pelanggan dengan ini dan saya menulis BOL untuk semuanya - jika Anda ingin memilih nilai sebagai taruhan, 70% telah melihat yang paling sukses. Seperti kata Nick, monitor dan atur sesuai kebutuhan.

Memilih fillfactor untuk indeks apa pun adalah tindakan menyeimbangkan dari seberapa banyak aktivitas terjadi yang mendorong kepenuhan halaman menuju 100% dan seberapa sering Anda dapat mengambil tindakan korektif untuk mengatur ulang fillfactor. Anda perlu berpikir tentang berapa banyak ruang awalnya akan 'terbuang' pada halaman jika Anda mengatur fillfactor sangat rendah, seperti 50%, tetapi sekali lagi saya telah melihat ini sesuai dalam beberapa kasus.

Anda juga harus mempertimbangkan bagaimana indeks akan digunakan. Jika itu hanya untuk pencarian tunggal, Anda mungkin pergi dengan fillfactor yang lebih rendah dan lebih banyak waktu antara membangun kembali / defrag karena Anda tidak akan membuang terlalu banyak IOs / memori dari memiliki banyak indeks cluster yang jarang penduduknya dalam memori. Untuk melakukan pemindaian rentang besar, Anda ingin memiliki fillfactor sedikit lebih tinggi, untuk meningkatkan IO dan efisiensi memori.

Ada juga pertanyaan OLTP vs DW - biasanya DW tidak berubah sehingga indeks akan memiliki 100% fillfactor. OLTP adalah bagian yang sulit.

Setelah Anda memilah-milah indeks berkerumun, ingat bahwa nonclustereds akan membutuhkan perhatian juga karena mereka kemungkinan besar akan terfragmentasi.

Saat mengatur ulang fillfactor, ingatlah Anda memiliki pilihan antara membangun kembali dan defragging. DBCC INDEXDEFRAG / ALTER INDEX ... REORGANIZE dapat mengatur ulang fillfactor dalam beberapa kasus untuk indeks yang tidak terfragmentasi dengan buruk.

Semoga ini membantu!

(Maaf untuk 'jawaban berlebihan' - salah satu tombol panas saya, setelah menulis kode :-)

Paul Randal
sumber