Anda memiliki alasan yang baik untuk khawatir karena DB menyusut dalam SQL Server sering "payah". Paul Randal, kepala Storage Engine di SQL 2005 menyatakan, ShrinkDB ditulis sangat buruk. Ini akan menemukan ruang kosong dengan mengambil data di bagian paling akhir dan meletakkannya di bagian paling awal dan terus melakukan ini sampai memiliki ruang kosong di 'ujung' file DB. Pada titik ini kemudian dapat melepaskan ruang dari SQL Server dan mengembalikannya ke OS. Anda secara efektif membalik file database Anda sehingga Anda akan melihat fragmentasi besar biasanya. Anda dapat membaca tentang pandangannya pada posting blog ini atau pada Video MCM Internals ini
Seperti halnya semuanya, Anda harus benar-benar menguji ini di lingkungan Anda terlebih dahulu. Cara yang lebih baik untuk melakukannya adalah memindahkan data ke grup file yang berbeda. Anda dapat melakukan pembangunan kembali indeks online dengan indeks berkerumun dan kemudian memasukkan kembali dalam filegroup baru. Kemudian Anda dapat menjatuhkan yang lama dan melepaskan ruang dan hampir tidak memiliki fragmentasi. Perhatikan ini akan membutuhkan sekitar 120% ruang ekstra saat sedang bekerja melaluinya. Masalahnya adalah Anda membutuhkan ruang kosong tambahan yang sepertinya tidak Anda miliki. Ini adalah fitur perusahaan.
Jika ruang kosong sebesar itu, maka Anda mungkin harus menggigit peluru dan perlahan-lahan mengecilkan DB sepotong kecil pada suatu waktu untuk menghindari proses berjalan lama. Perhatikan bahwa data Anda akan sangat terfragmentasi dan Anda akan ingin mengindeks kembali semuanya lagi. Perhatikan bahwa setelah pengindeksan ulang semuanya, Anda kemudian akan menggembungkan ruang bekas Anda dan kembali untuk memiliki ruang kosong tambahan. Lihat saran Brent di sini .
Sejauh berapa banyak ruang kosong yang baik untuk Anda, adalah soal seberapa banyak Anda mampu melakukan kegiatan fragmentasi dan pertumbuhan file. Dengan IFI diaktifkan, pertumbuhan file hampir instan tetapi Anda masih mendapatkan fragmentasi. Aturan praktis yang baik adalah melakukan preallocate sebanyak ruang yang Anda pikir akan Anda butuhkan, atau memantau pertumbuhan dan menyesuaikan potongan secara berkala jika Anda harus. Ini menjaga fragmentasi fisik tetap rendah.
Juga pertumbuhan file log jauh lebih penting. File log tambahan dapat menyebabkan fragmentasi VLF. Ini membuat pemulihan Anda lebih lambat dan dapat memengaruhi checkpoint / truncate. Inilah beberapa risiko kinerja yang Anda ambil dengan log yang terfragmentasi. Lakukan DBCC LOGINFO();
pada setiap database. Usahakan agar jumlahnya sekitar 50an per Kim Tripp, tetapi jika Anda melihat ratusan, Anda memiliki masalah fragmentasi yang berarti file log Anda harus tumbuh untuk mendukung operasi. Cara yang baik untuk melihat file log Anda seharusnya per Paul Randal adalah membiarkannya tumbuh selama seminggu dan mengindeks ulang. Itu bisa menjadi poin yang bagus, mungkin Anda bisa membuang sedikit lebih banyak ruang kosong di sana untuk berjaga-jaga. Pastikan log Anda tidak terfragmentasi dengan DBCC LOGINFO (); lagi dan jika ya, itu berarti mereka tumbuh banyak. Kecilkan dan perluas ulang file log menggunakanmetode ini .