У меня есть вставка, которая выполняется каждые 2 секунды (20 столбцов, 15000 строк, вне SQL Server [данные датчика]), она выполняется за 200 мс. Я хотел бы сохранить только 10 минут данных (сумма ~ 4.500.000 строк) в этой таблице, а затем переместить (заархивировать) самые ранние 5 минут в другую архивную таблицу (которая будет хранить 50 дней, миллиарды строк). Хранимая процедура архивирования:
begin tran
declare @UTC_min datetime2(2) = (select TOP 1 UTCLogDateTime from table1 order by UTCLogDateTime asc)
declare @UTC_copy datetime2(2) = dateadd(minute,5,@UTC_min)
INSERT INTO archive_table
SELECT *
FROM table1
where UTCLogDateTime<@UTC_copy
delete top(100000) from table1 where UTCLogDateTime<@UTC_copy
WHILE @@rowcount > 0
BEGIN
delete top(100000) from table1 where UTCLogDateTime<@UTC_copy
END
commit
Я хотел бы убедиться, что вставка работает безупречно и максимально быстро, без блокировки из этого процесса архивирования. Когда начинается архивация, время выполнения для вставки увеличивается до 4-5 сек. У меня также будет 2-х секундный живой запрос (Power BI) для чтения этой таблицы.
В настоящее время у меня есть кластеризованный индекс для столбца UTCLogDateTime для обеих таблиц.
Все эти процессы должны выполняться без проблем, без блокировки таблицы друг от друга. У вас есть предложения, как мне этого добиться?