Saya tahu bahwa sebenarnya ada tiga jenis fragmentasi yang perlu saya perhatikan sebagai DBA:
Indeks Fragmentasi dalam file data SQL, termasuk fragmentasi indeks tabel (tabel). Identifikasi ini menggunakan DBCC SHOWCONTIG (dalam SQL 2000) atau sys.dm_ db_ index_ physical_ stats (in 2005+).
VLF Fragmentasi di dalam file SQL Log. Jalankan DBCC LOGINFO untuk melihat berapa banyak VLF di setiap file log SQL Anda.
Fragmentasi file fisik dari file database pada hard drive. Diagnosis ini dengan menggunakan utilitas "Disk Defragmenter" di Windows. (terinspirasi oleh posting blog yang luar biasa ini )
Banyak perhatian diberikan pada indeks fragmentasi (lihat jawaban Serverfault yang sangat baik dari Paul Randall), jadi itu bukan fokus pertanyaan saya.
Saya tahu saya bisa mencegah fragmentasi fisik (dan fragmentasi VLF) ketika database awalnya dibuat dengan merencanakan file data yang diharapkan dan ukuran log, karena fragmentasi ini paling sering terjadi dari sering tumbuh dan menyusut, tapi saya punya beberapa pertanyaan tentang cara memperbaiki fragmentasi fisik setelah diidentifikasi:
Pertama-tama, apakah fragmentasi fisik bahkan relevan pada Enterprise SAN? Dapatkah saya / saya harus menggunakan Windows Defragmenter pada drive SAN, atau haruskah tim SAN menggunakan utilitas defragmenting internal? Apakah analisis fragmentasi yang saya dapatkan dari alat Windows bahkan akurat ketika dijalankan pada drive SAN?
Seberapa besar masalah fragmentasi fisik pada kinerja SQL? (Mari kita asumsikan array drive internal, sambil menunggu hasil dari pertanyaan sebelumnya.) Apakah ini kesepakatan yang LEBIH BESAR daripada fragmentasi indeks internal? Atau apakah itu benar-benar jenis masalah yang sama (drive harus melakukan pembacaan acak, bukan pembacaan berurutan)
Apakah defragmenting (atau pembangunan kembali) indeks membuang-buang waktu jika drive secara fisik terfragmentasi? Apakah saya perlu memperbaiki yang satu sebelum saya membahas yang lain?
Apa cara terbaik untuk memperbaiki fragmentasi file fisik pada kotak SQL produksi? Saya tahu saya bisa mematikan layanan SQL dan menjalankan Windows Defrag, tetapi saya juga mendengar tentang teknik di mana Anda melakukan pencadangan penuh, jatuhkan database, lalu kembalikan dari cadangan ke pengandar kosong. Apakah teknik yang terakhir ini direkomendasikan? Apakah memulihkan dari cadangan seperti ini juga membuat indeks dari awal, menghilangkan fragmentasi indeks internal? Atau apakah itu hanya mengembalikan urutan halaman ke sama seperti ketika cadangan diambil? (Kami menggunakan cadangan Quest Lightspeed dengan kompresi, jika itu penting.)
PEMBARUAN : Sejauh ini jawaban yang baik tentang apakah akan men-defrag drive SAN (TIDAK) dan apakah defragmentasi indeks masih bermanfaat pada drive yang terfragmentasi secara fisik (YA).
Adakah orang lain yang mau mempertimbangkan metode terbaik untuk benar-benar melakukan defragmentasi? Atau perkiraan lama waktu yang Anda harapkan untuk mendefrag drive besar yang terfragmentasi, katakanlah sekitar 500GB? Relevan, jelas, karena saat itulah server SQL saya akan turun!
Juga, jika ada yang punya info anekdotal tentang peningkatan kinerja SQL yang telah Anda buat dengan memperbaiki fragmentasi fisik, itu akan sangat bagus juga. Posting blog Mike berbicara tentang mengungkap masalah, tetapi tidak spesifik tentang perbaikan apa yang dibuatnya.