sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik verlopen gegevens van een enorme tabel verwijderen zonder dat het logbestand uit de hand loopt?

Ik heb het handig gevonden bij het verwijderen van een tabel met een groot aantal rijen om rijen te verwijderen in batches van bijvoorbeeld 5000 of zo (ik test meestal om te zien welke waarde het snelst werkt, soms zijn het 5000 rijen, soms 10.000, enz.) . Hierdoor kan elke wisbewerking snel worden voltooid, in plaats van lang te wachten tot één verklaring 400 miljoen records heeft uitgeschakeld.

In SQL Server 2005 zou zoiets als dit moeten werken (uiteraard eerst testen):

WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
BEGIN
  DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
END

Ik zou zien wat het verwijderen in batches doet met de grootte van het logbestand. Als het nog steeds de logboeken opblaast, kunt u proberen het herstelmodel te wijzigen in Eenvoudig , de records verwijderen en vervolgens terugschakelen naar Bulk Logged, maar alleen als het systeem het verlies van enkele recente gegevens kan tolereren. Ik zou zeker een volledige back-up maken voordat ik die procedure probeer. Deze thread suggereert ook dat je een taak zou kunnen instellen om een ​​back-up te maken van de logboeken met alleen truncate opgegeven, dus dat zou een andere optie kunnen zijn. Hopelijk heb je een instantie waarmee je kunt testen, maar ik zou beginnen met de batchverwijderingen om te zien hoe dat de prestaties en de grootte van het logbestand beïnvloedt.



  1. Hoe maak je een boom in html + php(codeIgniter)

  2. mysql autocasting string naar geheel getal

  3. Problemen met SQL Server MERGE-instructie

  4. Hoe de som van meerdere kolommen in Oracle te berekenen