Akhir-akhir ini, alih-alih hanya menumbuhkan file ketika mendekati utilisasi file 80%, saya lebih proaktif dalam merebut kembali ruang melalui trik biasa seperti defragmenting heaps, menambah & menjatuhkan indeks berkerumun, menerapkan kompresi baris atau halaman, dll.
Namun, ada beberapa kasus di mana saya bisa mendapatkan kembali lebih banyak ruang dengan mengeksekusi DBCC CLEANTABLE . Dengan ratusan basis data di lingkungan saya, tidak mungkin mengetahui apa yang dilakukan pengguna di masing-masing dan benar-benar dapat diterima bahwa akan ada perubahan yang melibatkan penurunan kolom dengan panjang tetap. Saya biasanya menemukan peluang ini dengan melihat jumlah baris vs jumlah halaman dalam beberapa skrip pemanfaatan ruang objek yang saya tulis. Saya ingin mengambil langkah ini lebih jauh dengan mencoba mengotomatiskan deteksi skenario semacam ini.
Yang ingin saya ketahui adalah apakah ada orang di luar sana yang secara aktif memantau peluang semacam ini dan jika demikian, apa yang Anda cari secara spesifik?
Pikiranku adalah untuk menulis sesuatu di sepanjang garis mengumpulkan ukuran max dan min dari satu baris, jumlah baris dalam tabel, jumlah halaman yang dialokasikan, dan jumlah halaman yang digunakan, kemudian melakukan beberapa matematika dasar untuk mencatat hasil yang berada di luar apa yang akan "diharapkan".
sumber
Jawaban:
Solusi yang saya pikirkan untuk masalah ini adalah menjalankan pekerjaan mingguan yang akan menjalankan sp_spaceused untuk semua tabel dalam database dan menyimpan data ini dalam sebuah tabel. Jika ada perbedaan ukuran untuk masing-masing tabel lebih besar dari .. biarkan saja katakanlah, 10%, saya akan menjalankan dbcc yang dapat dibersihkan.
Kode saya untuk mengulang ukuran tabel terlihat seperti itu:
Sekarang Anda hanya perlu membangun logika yang akan memverifikasi apa yang akan berubah ukuran sepanjang minggu dan menjadwalkannya.
sumber