Saya memiliki database SQL Server (2008 R2 SP1) yang sekitar 15 gigs. Ternyata pemeliharaan tidak berjalan dalam beberapa saat, jadi saya membuat rencana pemeliharaan untuk membangun kembali semua indeks, mereka sangat terfragmentasi.
Pekerjaan selesai dan fragmentasi hilang, tetapi sekarang database lebih dari 120 pertunjukan! Saya mengerti bahwa itu akan menggunakan ruang ekstra untuk melakukan semua pembangunan kembali, tetapi sekarang setelah pekerjaan selesai, saya akan berpikir semua ruang itu akan menjadi ruang bebas, tetapi ruang bebas hanya menunjukkan sebagai 3 gigs, jadi 117 gigs sedang digunakan meskipun pekerjaan membangun kembali indeks selesai.
Saya sangat bingung dan dapat menggunakan beberapa panduan, saya mendapatkan db kembali ke ukuran yang masuk akal, kami tidak memiliki ruang disk untuk ini.
Terima kasih sebelumnya!
Inilah hasil dari kedua pertanyaan yang diposting:
log_reuse_wait_desc TIDAK ADA
name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB
LIVE_Data 152 123 28
LIVE_Log 18939 89 18849
LIVE_1_Data 114977 111289 3688
File ke-3 adalah file .ndf, yang menunjukkan hanya 3688 di ruang yang tidak digunakan, tetapi 111289 di gunakan untuk sekitar 15 gigs data.
Membangun kembali indeks menyebabkan ruang kendur ekstra dalam DB. Ini adalah produk sampingan alami dari proses pengindeksan ulang - server sedang membangun versi indeks yang baru dan mudah-mudahan berdekatan dengan versi saat ini, kemudian menjatuhkan versi saat ini ketika selesai.
Menyusut setelah pengindeksan ulang tidak ada gunanya!
Anda hanya akan mem-fragment ulang indeks! Shrinking menghapus ruang kendur dengan realokasi data dalam DB.
Inilah artikel bagus dari Paul Randal, yang ketika bekerja di Microsoft bertanggung jawab atas
DBCC
kode termasuk menyusut, mengapa Anda tidak boleh menyusut.sumber
Anda seharusnya menggunakan opsi rekondisi
SORT_IN_TEMPDB=ON
.Dalam kasus Anda, file data aktual, di mana tabel tersebut berada, telah digunakan untuk mengurutkan indeks. Sebagian besar ruang 120GB masih belum digunakan dan akan diisi dengan data halaman saat dibutuhkan.
Anda dapat melihat status ruang bekas / bebas dengan kueri ini (diambil dari sini ):
Untuk menyusutkan file database tertentu (data atau log), Anda dapat melihat beberapa info di sini . Peringatan sebelumnya, melepaskan ruang yang tidak terpakai cukup lama untuk 100+ basis data Gb (tergantung juga pada kecepatan penyimpanan), jadi biarkan saja.
sumber
Tanpa detail lain, saya curiga Anda perlu melakukan backup log transaksi sebelum Anda dapat mengklaim kembali ruangnya.
Lihat apa yang
select name, log_reuse_wait_desc from sys.databases
memberitahu Anda. Jika kolom log_reuse_wait_desc mengatakanLOG_BACKUP
maka itu tidak dapat merebut kembali ruang sampai Anda telah membuat cadangan dari tran log.sumber