Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да изтрия изтекли данни от огромна таблица, без регистрационният файл да излезе извън контрол?

Намерих за полезно, когато правя изтривания от таблица с голям брой редове, да изтривам редове на партиди от около 5000 (обикновено тествам, за да видя коя стойност работи най-бързо, понякога са 5000 реда, понякога 10 000 и т.н.) . Това позволява на всяка операция за изтриване да завърши бързо, вместо да чака дълго време, докато един оператор изтрие 400 милиона записа.

В SQL Server 2005 нещо подобно трябва да работи (моля, първо тествайте, разбира се):

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

Бих видял какво прави изтриването на партиди с размера на регистрационния файл. Ако все още раздухва регистрационните файлове, можете да опитате да промените модела за възстановяване на Прост , изтриване на записите и след това превключване обратно към Bulk Logged, но само ако системата може да толерира загубата на някои скорошни данни. Определено бих направил пълно архивиране, преди да опитам тази процедура. Тази нишка също предлага, че бихте могли да настроите задание за архивиране на регистрационните файлове с посочено само съкращаване, така че това може да е друга опция. Надяваме се, че имате екземпляр, с който можете да тествате, но бих започнал с пакетните изтривания, за да видя как това се отразява на производителността и размера на регистрационния файл.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL подзаявка Макс (дата) и присъединявания

  2. свържете две колони на базата данни в една колона с набор от резултати

  3. Получаване на грешка при съхраняване на данни в sql сървър 2005 чрез текстово поле

  4. Как да намеря дублирания брой сред няколко колони?

  5. SQL Server 2008 Change Data Capture, кой направи промяната?