Таймауты SQL Server - повторные попытки или более длительные таймауты? - PullRequest
2 голосов
/ 21 октября 2019

У меня есть команда UPDATE, которая не работает из-за тайм-аута на SQL Server. Это большая таблица, используемая для хранения событий, и первичным ключом является некластеризованный индекс (в любом случае это не имеет значения, поскольку это столбец uniqueidentifier).

Он обновляет одну строку: update [table] set [field] = 1 where [primary_key] = [primary_key_value];. Вероятно, проблема заключается в том, что существует более 200 000 000 строк, поэтому поиск каждой из них занимает много времени.

С точки зрения предпочтений SQL Server лучше ли увеличить время ожидания команды (да, я знаю,30 секунд по умолчанию уже в 30 раз длиннее, чем может потребоваться любой разумный запрос), или я должен ввести, возможно, более короткий тайм-аут, но повторять снова и снова (до предела)?

Так что, один длинный 60-секундный тайм-аут команды лучше, чем 6 повторов с 5-секундным тайм-аутом?

На практике, конечно, будет некоторый экспоненциальный откат и реализация автоматического выключателя.

1 Ответ

2 голосов
/ 21 октября 2019

Это немного длинно для комментария.

Повторная попытка поможет только в том случае, если причина истечения времени вызвана конфликтом ресурсов. В этом случае вам, вероятно, лучше с некоторой экспоненциальной отсрочкой, а не просто выполнять запросы немедленно.

Однако я бы предположил, что причина кроется либо в:

  • Неоптимизированный запрос.
  • Большое количество обновляемых строк.

Если проблема заключается в количестве строк, вы можете ограничить update, скажем, до 100строки и повторите обновление, пока все не будут завершены. Однако сначала я бы изучил запрос, чтобы выяснить, можно ли его оптимизировать другими способами.

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