Как стать автором
Обновить

Комментарии 4

А как все просто в мире кровавого энтерпрайза -для deadlock/locktimeout события с полной хистори валятся в файл, для нужд мониторинга счетчики автоматом собираются и на уровне менеджера, базы и отдельного коннекта, для расследования — create event monitor for locking и вся картина есть… А ловить в онлайне на oltp базе прода с тысячами транзакций в сек — я не представляю. У нас lock_timeout большинства приложений 1 сек., у привилегированных 5. Конечно, далеко не все просто — бывает сложно разобраться, когда встречаются больше 2 транзакций. Плюс нужно понимать, не было ли эскалаций, с каким уровнем изоляции выполнялось и тд. А если это для olapa — там, обычно, проще по стейтментам пройтись.
У нас lock_timeout большинства приложений 1 сек.
Для наших условий с OLTP это очень много, как показывает практика. 100мс гораздо лучше заходит.

Вопрос исключительно в удобстве интерфейса анализа:
Т.е. через 100 мс откат по таймауту? Или все же Deadlock_timeout — ну если читать как написано, должен лишь означать период для запуска процесса проверки и разрешения deadlock'ов? Процесс этот весьма затратный по ресурсам при большом числе соединений и транзакций, только на период стабилизации выставляем его в минимум. И deadlock не может развязаться сам по себе — менеджер принудительно откатывает одну из блокирующих транзакций. И как раз чтобы понять, как транзакции сумели войти в клинч, нужна история во времени со всеми стейтментами и, по созданным блокировкам, снапшот на момент обнаружения.
Я не понимаю как можно «снимать состояние блокировок в базе» для oltp-системы, где locklist в десятки тысяч записей, который меняется с каждым стейтмент'ом…
Если случился deadlock — да, он через 100мс откатится. Если обычная блокировка — она через это же время «нажалуется» в лог, где мы ее увидим и начнем снимать состояние.

Но делаем это только для конфликтующих за блокировки процессов. А они (стейтменты) заведомо не могут поменяться во время существования конфликта.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий