sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu odstranit data s vypršenou platností z velké tabulky, aniž by se soubor protokolu vymkl kontrole?

Zjistil jsem, že při odstraňování z tabulky s velkým počtem řádků je užitečné mazat řádky v dávkách řekněme 5 000 nebo tak nějak (obvykle testuji, abych zjistil, která hodnota funguje nejrychleji, někdy je to 5 000 řádků, někdy 10 000 atd.) . To umožňuje rychlé dokončení každé operace odstranění, namísto dlouhého čekání, než jeden příkaz vyřadí 400 milionů záznamů.

V SQL Server 2005 by něco takového mělo fungovat (nejdříve samozřejmě otestujte):

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

Viděl bych, co dělá mazání v dávkách s velikostí souboru protokolu. Pokud stále fouká do protokolů, můžete zkusit změnit model obnovy na Jednoduché , vymazání záznamů a poté přepnutí zpět na Hromadně protokolované, ale pouze v případě, že systém toleruje ztrátu některých posledních dat. Před pokusem o tento postup bych určitě provedl úplnou zálohu. Toto vlákno také navrhuje, že byste mohli nastavit úlohu pro zálohování protokolů pouze se zadaným zkrácením, takže by to mohla být další možnost. Doufejme, že máte instanci, se kterou můžete testovat, ale začal bych s dávkovým mazáním, abych zjistil, jak to ovlivní výkon a velikost souboru protokolu.



  1. Rozbalovací nabídka přístupu TreeView ImageCombo

  2. Přidejte indexy pro urychlení Geocoder v blízkosti vyhledávání

  3. Jak nastavit primární klíč automatického zvýšení v PostgreSQL?

  4. Jak uložit datovou tabulku do databáze?