Saya merasa berguna ketika melakukan penghapusan dari tabel dengan sejumlah besar baris untuk menghapus baris dalam kumpulan katakanlah 5000 atau lebih (saya biasanya menguji untuk melihat nilai mana yang bekerja paling cepat, terkadang 5000 baris, terkadang 10.000, dll.) . Hal ini memungkinkan setiap operasi penghapusan selesai dengan cepat, daripada menunggu lama hingga satu pernyataan menghapus 400 juta catatan.
Di SQL Server 2005, sesuatu seperti ini akan berfungsi (harap uji terlebih dahulu, tentu saja):
WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
BEGIN
DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
END
Saya akan melihat apa yang dilakukan penghapusan dalam batch terhadap ukuran file log. Jika log masih meledak, Anda dapat mencoba mengubah Model Pemulihan menjadi Sederhana , menghapus catatan, lalu beralih kembali ke Dicatat Massal, tetapi hanya jika sistem dapat mentolerir hilangnya beberapa data terbaru. Saya pasti akan membuat Full Backup sebelum mencoba prosedur itu. utas ini juga menyarankan agar Anda dapat mengatur pekerjaan untuk mencadangkan log dengan truncate yang hanya ditentukan, sehingga itu bisa menjadi opsi lain. Mudah-mudahan Anda memiliki contoh yang dapat Anda uji, tetapi saya akan mulai dengan penghapusan batch untuk melihat bagaimana hal itu memengaruhi kinerja dan ukuran file log.