Настройка производительности данных таблицы очистки в SQL Server 2016
Мне нужно автоматизировать очистку огромного объема данных из основной таблицы в архиве.
Шаги, которые я выполняю:
Я вставляю данные из основной таблицы в архивную таблицу.
После перекрестной проверки количества в обеих таблицах, удаление данных из основной таблицы.
Риск: Оператор удаления может перейти в зависшее состояние, а БД перейдет в режим восстановления.
Примечание : мы не можем выполнять какие-либо операции DDL для основной таблицы, поскольку это таблица живых транзакций. Мы можем пойти с DML.
- База данных: SQL Server 2016
- ОС: Windows и IIS
Ответы
DDL - один из основных способов ускорения удаления записей, но, учитывая, что DDL не подходит, и вы сталкиваетесь с «зависшими состояниями» для операторов удаления, возможно, я предлагаю изучить удаление записей партиями?
См. Ссылку , а вот пример запроса на основе ссылки:
DECLARE @Batch INT = 1000
WHILE 1 = 1
BEGIN
DELETE TOP (@Batch)
FROM MyTable
WHERE Date < ‘20200401’';
IF @@ROWCOUNT < @Batch BREAK
END
В этом случае, когда мы удаляем по дате, убедитесь, что у вас есть индекс по дате, чтобы SQL Server мог быстро захватить только эти строки. Вы захотите избежать блокировки на уровне таблицы.