Список ошибок SQL Server, которые должны быть повторены?

Существует ли краткий список ошибок хранимой процедуры SQL Server, которые имеют смысл автоматически повторять? Очевидно, повторяя "вход в систему, отказавший", ошибка не имеет смысла, но повторение "тайм-аут" делает. Я думаю, что могло бы быть легче указать который ошибки повторить, чем указать который ошибки не повторить.

Так, помимо ошибок "тайм-аута", что другие ошибки были бы хорошими кандидатами на автоматическое повторение?

Спасибо!

5
задан Chris 30 December 2009 в 16:05
поделиться

4 ответа

[

] Следует повторить (повторить) всю транзакцию, а не только один запрос/SP. Что касается ошибок для повторных попыток, я использовал следующий список: [

] [
DeadlockVictim = 1205,
SnapshotUpdateConflict = 3960,
// I haven't encountered the following 4 errors in practice
// so I've removed these from my own code:
LockRequestTimeout = 1222,
OutOfMemory = 701,
OutOfLocks = 1204,
TimeoutWaitingForMemoryResource = 8645,
] [

] Самая важная из них, конечно, ошибка "жертва тупика" 1205. [

]
3
ответ дан 14 December 2019 в 08:52
поделиться

Я не уверен насчет полного списка этих ошибок, но могу предупредить вас, будьте ОЧЕНЬ осторожны при повторных запросах. Часто при получении ошибок из SQL возникает большая проблема, и простое повторное выполнение запросов только еще больше уплотнит проблему. Например, при ошибке с таймаутом, у вас, как правило, будет либо узкое место в сети, либо плохо индексированные таблицы, либо что-то на этих строках, и повторный запуск одного и того же запроса добавит латентности другим запросам, которые, очевидно, уже изо всех сил пытаются выполнить.

.
0
ответ дан 14 December 2019 в 08:52
поделиться
[

] Единственная sql ошибка сервера, которую вы всегда должны ловить на вставках и обновлениях (и которая довольно часто пропускается), это ошибка deadlock error no. 1205 [

] [

] Соответствующее действие заключается в повторной попытке несколько раз повторить INSERT/UPDATE [

].
0
ответ дан 14 December 2019 в 08:52
поделиться

Я бы расширил этот список, если вы хотите получить абсолютно полный список, используйте запрос и отфильтруйте результат.

select * from master.dbo.sysmessages where description like '%memory%'


    int[] errorNums = new int[]
    {
        701, // Out of Memory
        1204, // Lock Issue
        1205, // Deadlock Victim
        1222, // Lock request time out period exceeded.
        7214, // Remote procedure time out of %d seconds exceeded. Remote procedure '%.*ls' is canceled.
        7604, // Full-text operation failed due to a time out.
        7618, // %d is not a valid value for a full-text connection time out.
        8628, // A time out occurred while waiting to optimize the query. Rerun the query.
        8645, // A time out occurred while waiting for memory resources to execute the query. Rerun the query.
        8651, // Low memory condition
    };
2
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: