Jeg har fundet det nyttigt, når jeg sletter fra tabel med et stort antal rækker, at slette rækker i batches på f.eks. 5000 eller deromkring (jeg tester normalt for at se, hvilken værdi der virker hurtigst, nogle gange er det 5000 rækker, nogle gange 10.000 osv.) . Dette gør det muligt for hver sletning at fuldføre hurtigt i stedet for at vente længe på, at én erklæring slår 400 millioner poster ud.
I SQL Server 2005 burde noget som dette fungere (test venligst først, selvfølgelig):
WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
BEGIN
DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
END
Jeg ville se, hvad sletning i batches gør ved logfilstørrelsen. Hvis det stadig sprænger logfilerne, kan du prøve at ændre gendannelsesmodellen til Simpel , sletning af registreringerne og derefter skift tilbage til Bulk Logged, men kun hvis systemet kan tolerere tab af nogle nyere data. Jeg ville helt sikkert lave en fuld sikkerhedskopi, før jeg forsøger den procedure. Denne tråd foreslår også, at du kan konfigurere et job til at sikkerhedskopiere logfilerne med kun specificeret trunkering, så det kunne være en anden mulighed. Forhåbentlig har du en instans, du kan teste med, men jeg vil starte med de batchede sletninger for at se, hvordan det påvirker ydeevnen og logfilens størrelse.