Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa menghapus data kedaluwarsa dari tabel besar tanpa membuat file log tumbuh di luar kendali?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kode yang dikomentari melempar kesalahan

  2. BUAT TABEL JIKA TIDAK ADA yang setara di SQL Server

  3. SQL Server 2005:cara mengurangi 6 bulan

  4. Tipe data apa yang harus saya gunakan untuk menyimpan nilai moneter?

  5. Dapatkan substring di SQL Server