Назад | Перейти на главную страницу

Большая вставка / обновление в таблице вызывает тайм-аут, пока SQL Server переупорядочивает индексы

Мы вставляем / удаляем около 1 миллиона строк в таблицу с двумя миллионами строк с помощью SSIS.

У нас есть 20 индексов в этой таблице.

Сразу после завершения SSIS мы наблюдаем тайм-ауты во внешнем интерфейсе. Таймауты со временем исчезнут.

Я подозреваю, что это происходит из-за индексов во время их реорганизации.

Что мы можем сделать?

Индексы обновляются по мере обновления данных, обновления индексов синхронны.

Теперь обновление статистики - это асинхронная операция. После того, как обновление данных будет выполнено вручную, обновите статистику по рассматриваемым таблицам.

Обновляя более 20% строк в таблице, вы запускаете статистика Обновить.

По умолчанию sql server выполняет это синхронно. Это означает, что если затронутый индекс используется в плане выполнения, оптимизатор замечает, что статистика устарела, немедленно выполняет обновление и повторно компилирует план выполнения.

В SQL Server 2005 появилась новая функция, которая сделает обновление статистики для базы данных асинхронным, т. Е. Оптимизатор будет использовать устаревшую статистику, но запускать обновление статистики в фоновом режиме, чтобы следующий запрос использовал преимущества новой статистики. . Команда AUTO_UPDATE_STATISTICS_ASYNC ON видеть BOL Чтобы получить больше информации.

Альтернатива, как уже было предложено, - это принудительное обновление таблицы вручную после загрузки. Вы можете сделать это с помощью UPDATE STATISTICS команда. Здесь BOL ссылка.

Если вы используете задачу массовой вставки в SSIS, вы можете попробовать установить размер пакета, это разбивает его на более мелкие фрагменты с коммитами между ними.