Я обнаружил, что при удалении из таблицы с большим количеством строк полезно удалять строки в пакетах, скажем, 5000 или около того (обычно я проверяю, какое значение работает быстрее всего, иногда это 5000 строк, иногда 10000,так далее.).Это позволяет быстро завершить каждую операцию удаления, вместо того, чтобы долго ждать, пока один оператор выбьет 400 миллионов записей.
В SQL Server 2005 должно сработать что-то вроде этого (сначала проверьте, конечно):
WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
BEGIN
DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
END
Я бы посмотрел, что удаление в пакетах влияет на размер файла журнала.Если он все еще взрывает журналы, вы можете попробовать изменить модель восстановления на Simple , удалить записи, а затем переключиться обратно на Bulk Logged, но только если система может допустить потерю некоторых последнихданные.Я бы определенно сделал полную резервную копию, прежде чем пытаться эту процедуру.Этот поток также предполагает, что вы можете настроить задание на резервное копирование журналов только с указанным усечением, что может быть другим вариантом.Надеюсь, у вас есть экземпляр, который вы можете протестировать, но я бы начал с пакетного удаления, чтобы увидеть, как это влияет на производительность и размер файла журнала.