Настройка производительности данных таблицы очистки в SQL Server 2016

Aug 15 2020

Мне нужно автоматизировать очистку огромного объема данных из основной таблицы в архиве.

Шаги, которые я выполняю:

  1. Я вставляю данные из основной таблицы в архивную таблицу.

  2. После перекрестной проверки количества в обеих таблицах, удаление данных из основной таблицы.

Риск: Оператор удаления может перейти в зависшее состояние, а БД перейдет в режим восстановления.

Примечание : мы не можем выполнять какие-либо операции DDL для основной таблицы, поскольку это таблица живых транзакций. Мы можем пойти с DML.

  • База данных: SQL Server 2016
  • ОС: Windows и IIS

Ответы

4 MTay Aug 15 2020 at 15:58

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 мог быстро захватить только эти строки. Вы захотите избежать блокировки на уровне таблицы.