Bagaimana saya bisa tahu kapan saatnya untuk mendefrag database SQLServer saya?

9

Apa praktik terbaik untuk mengukur fragmentasi basis data / kinerja SQLServer dan menentukan kapan harus mendefrag tabel SQLServer database?

Saya paling tertarik mempelajari apa metrik yang berguna dan tingkat penurunan kinerja apa yang harus memicu defrag.

Jeff Leonard
sumber

Jawaban:

22

Saya yakin akan ada beberapa jawaban menarik untuk ini, karena ada banyak perbedaan pendapat tentang metrik apa yang harus dilihat. Saya menulis DBCC INDEXDEFRAG, SHOWCONTIG dan merancang penggantian mereka untuk tahun 2005, ditambah menulis konten Books Online, jadi saya akan memberi Anda pandangan saya, dan menjelaskan angka-angka di Books Online dan panduan rencana pemeliharaan untuk tahun 2005, yang saya pilih.

Dua metrik terbaik untuk melihat untuk fragmentasi indeks adalah: 1) (2005) rata-rata fragmentasi dalam persen / (2000) fragmen pindai logis 2) (2005) kepadatan halaman rata-rata / (2000) rata-rata byte gratis per halaman

Ini berlaku sama untuk indeks cluster dan nonclustered.

1 sedang mengukur seberapa banyak fragmentasi logis yang ada. Ini terjadi ketika urutan logis halaman pada tingkat daun indeks tidak cocok dengan urutan fisik. Ini mencegah Storage Engine dari melakukan readahead efisien selama pemindaian jangkauan. Jadi # 1 memengaruhi kinerja pemindaian rentang, bukan kinerja pencarian tunggal.

2 mengukur seberapa banyak ruang terbuang yang ada pada setiap halaman di tingkat daun indeks. Ruang terbuang berarti bahwa Anda menggunakan lebih banyak halaman untuk menyimpan catatan, yang berarti lebih banyak ruang disk untuk menyimpan indeks, lebih banyak IO untuk membaca indeks, dan lebih banyak memori untuk menyimpan halaman dalam memori di kumpulan buffer.

Ambang batas? Aturan umum saya adalah fragmentasi kurang dari 10%, tidak melakukan apa-apa. 10-30%, lakukan ALTER INDEX ... REORGANIZE (2005) / DBCC INDEXDEFRAG (2000). Lebih dari 30%, lakukan ALTER INDEX ... REBUILD (2005) / DBCC DBREINDEX (2000). Ini adalah generalisasi lengkap dan ambang batas untuk Anda akan bervariasi.

Untuk menemukan ambang Anda, lakukan beberapa pelacakan kinerja beban kerja terhadap level fragmentasi dan putuskan kapan penurunan kinerja terlalu banyak. Pada titik itu, Anda perlu mengatasi fragmentasi. Ada tindakan menyeimbangkan antara hidup dengan fragmentasi dan mengambil sumber daya untuk menghapusnya.

Saya belum menyentuh di sini tentang pertukaran antara dua metode penghapusan fragmentasi, hal-hal seperti FILLFACTOR / PADINDEX untuk mencoba mengurangi fragmentasi dan melakukan sedikit defragging, perubahan skema / pola akses untuk mengurangi fragmentasi, atau berbagai jenis rencana pemeliharaan .

Oh, btw, saya selalu merekomendasikan untuk tidak repot tentang fragmentasi dalam indeks dengan kurang dari 1000 halaman. Ini karena indeks mungkin sebagian besar penduduk memori (dan karena orang meminta nomor dan saya harus membuat satu).

Anda dapat membaca lebih lanjut tentang ini di artikel Majalah TechNet saya tentang pemeliharaan basis data di http://technet.microsoft.com/en-us/magazine/cc671165.aspx , di whitepaper berbasis 2000 tentang indeks praktik terbaik defrag saya membantu menulis di http://technet.microsoft.com/en-us/library/cc966523.aspx , dan di blog saya di bawah kategori Fragmentasi di http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx .

Saya agak terlalu banyak menjawab, saya pikir, tapi ini salah satu dari tombol-panas saya. Semoga ini membantu :-)

Paul Randal
sumber