Вопрос

У меня есть особая ситуация. У меня есть таблицы, которые постоянно обращаются к разным частям нашего кода и тысячи клиентов, и поэтому мы использовали использование транзакций при простых обновлениях и вставках на наши таблицы. Проблема заключается в том, что мы продолжаем получать ошибки тупика. У кого-нибудь есть идеи, как я могу облегчить эту проблему?

Это было полезно?

Решение

Тупики могут возникнуть по многим причинам и их комбинациям:

  • Бедный дизайн схемы

  • Неправильные индексы для вашей нагрузки на запрос

  • Плохо написано TSQL

  • Агрессивные уровни изоляции транзакций и / или длинные операции

  • Плохие шаблоны доступа к применению

  • Низкая спецификация или неправильно настроенное оборудование

Все это распространено.

Я предлагаю вам прочитать

Другие советы

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

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

Я предлагаю начать с SQL Server Profiler и настроить трассировку, которая будет генерировать график тупика. Это, по крайней мере, определит ваши проблемы проблем и ресурсы, которые не заблокированы. Установите еще один след, который в поисках медленных запросов (> Скажем, 100 мс) и скорость их тоже. Чем дольше ваши запросы бегут, тем выше вероятность разрыва блокировки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top