Когда лучше назвать UPDATE STATISTICS?до или после COMMIT TRANS - PullRequest
1 голос
/ 11 апреля 2019

Я работаю над проектом ETL, активно заполняя таблицы данными.Иногда, если чего-то не хватает, целый блок изменений данных должен быть отменен, поэтому я использую транзакцию.Когда что-то идет не так, применяется откат, если нет, ОБНОВЛЕНИЕ СТАТИСТИКИ может помочь эффективности.

Так что мой вопрос в том, что было бы более эффективно, ОБНОВИТЬ СТАТИСТИКУ внутри транзакции или после COMMIT?

В настоящее время работает нормально, как:

BEGIN TRY
    BEGIN TRAN
    UPDATE stuffs SET ...
    INSERT things VALUES(...

    UPDATE STATISTICS stuffs
    UPDATE STATISTICS things
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK TRAN
    RAISERROR( ... -- RAISERROR prevents from executing past this point
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN

Но, может быть, этолучше

BEGIN TRY
    BEGIN TRAN
    UPDATE stuffs SET ...
    INSERT things VALUES(...

END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK TRAN
    RAISERROR( ... -- RAISERROR prevents from executing past this point
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN

UPDATE STATISTICS stuffs
UPDATE STATISTICS things

Я пробовал оба с практически одинаковыми результатами, но с большим количеством данных или большим количеством откатов могут быть разные.

1 Ответ

0 голосов
/ 11 апреля 2019

Я буду использовать второй.

Транзакция будет откатываться при возникновении ошибок, если вы поместите их в блок try.

Я полагаю, что вам все еще нужно «обновить статистику», чтобы повысить эффективность даже после того, как откат применяется к вашей транзакции. Если это так, лучше сохранить «обновление статистики» после совершения транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...