Мы используем модель полного восстановления в SQL Server. У нас есть задание, которое объединяет промежуточную таблицу с финальной. Промежуточная таблица содержит миллионы строк. Финальная таблица также огромна с миллионами строк. Мы объединяем партии по 10 000 строк.
Ниже приведен псевдокод для одной партии:
BEGIN TRANSACTION
DELETE TOP 10000 *
FROM <Staging Table>
OUTPUT deleted.* INTO @TableVariable
MERGE INTO <Final Table>
USING @TableVariable
COMMIT TRANSACTION
Проблема в том, что пакетная операция становится все медленнее для каждой новой партии. Когда мы перезапускаем сервер, пакеты снова становятся быстрее. Транзакции также не записываются на диск и занимают очень много времени для вставки на диск. Мы подозреваем, что это проблема с журналом транзакций. Когда мы уменьшаем размер пакета, происходит больше транзакций, а пакеты замедляются еще больше.
Есть ли способ улучшить производительность такого пакетного удаления и объединения? Вы рекомендуете использовать CHECKPOINT
для принудительного использования модели полного восстановления?