Шаблоны для обработки SQL заходят в тупик в C#?

Я пишу приложение в C#, который получает доступ к базе данных SQL Server 2005. Приложение является вполне интенсивной базой данных, и даже если я попытаюсь оптимизировать весь доступ, настрою надлежащие индексы и так далее, то я ожидаю, что получу мертвые блокировки рано или поздно. Я знаю, почему мертвые блокировки базы данных происходят, но я сомневаюсь, что буду в состоянии выпустить программное обеспечение без мертвых блокировок, происходящих в некоторое время. Приложение использует Платформу Объекта для доступа к базе данных.

Там хорошо работают шаблон для обработки SQLExceptions (заведенного в тупик) в клиентском коде C# - например, чтобы повторно выполнить пакет операторов после x миллисекунды?

Разъясниться; я не ищу метод о том, как избежать мертвых блокировок во-первых (уровни изоляции, индексы, порядок операторов и т.д.), а скорее как обработать их, когда они на самом деле происходят.

14
задан martin 13 January 2010 в 13:21
поделиться

2 ответа

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

Краткий ответ - оберните вещь в попытке .. Если вы поймаете ошибку, которая выглядит как тупик, сон для короткого случайного времени и увеличивает повторение счетчика. Если вы получите другую ошибку или счетчик повторных попыток очистить свой порог, бросьте ошибку обратно до вызова рутины.

(И если вы сможете, попробуйте подключить это в общей рутине и запустить большинство / все ваши доступ в БД через него, поэтому вы обрабатываете программу для тупиков.)

Редактировать: ах, научить меня не Используйте Google! Образец предыдущего кода I и другие дали в Как получить эффективный сервер SQL Server Doblock в C # с ADO?

6
ответ дан 1 December 2019 в 15:12
поделиться

Вот подход, на котором мы взяли последнюю структуру приложений, на которой я работал. Когда мы обнаружили тупик, мы просто повторяем транзакцию. Мы сделали это до 5 раз. Если через 5 раз он не удалось, мы бы бросили исключение. Я не вспоминаю время, когда вторая попытка когда-либо потерпела неудачу. Мы бы знали, потому что мы регистрировали всю активность в BackeND Code. Таким образом, мы знали, что в любое время произошло тупик, и мы знали, если это не удалось более 5 раз. Этот подход работал хорошо для нас.

Рэнди

4
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

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