Анализ и устранение блокировок в 1С 8 Ключевые слова: 1с, 1с 8, оптимизация 1с, запрос 1с, блокировки в 1с
Взаимоблокировка - это неразрешимый конфликт блокировок, возникающий при работе двух или более сессий 1С:Предприятия.
Для понимания взаимоблокировок необходимо знать, что такое блокировка и ожидание на блокировке. Подробная информация по этой теме содержится в статье «Блокировки данных в 1С:Предприятии 8 ». Рекомендуется предварительно ознакомится с этим материалом для лучшего понимания текста настоящей статьи.
В случае взаимоблокировки двух сессий конфликт заключается в том, что сессия 1 ожидает снятия блокировки, установленной сессией 2, в то время как сессия 2 в свою очередь ожидает снятия блокировки, установленной сессией 1. Ни одна из сессий не может ни продолжить свою работу (из-за ожидания), ни снять свою блокировку для того, чтобы дать конкурирующей сессии продолжить работу.
Такой конфликт не может быть разрешен без участия внешних (по отношению к обеим сессиям) механизмов. Подобные механизмы реализованы во всех СУБД, используемых 1С:Предприятием, а так же в самом сервере 1С:Предприятия (для обнаружения неразрешимых конфликтов управляемых блокировок). Будем называть эти механизмы «менеджерами взаимоблокировок».
Менеджер взаимоблокировок работает следующим образом:
С определенной периодичностью анализирует установленные в данный момент блокировки на предмет наличия неразрешимых конфликтов.
При обнаружении неразрешимого конфликта (взаимоблокировки) менеджер откатывает одну из транзакций, участвующих во взаимоблокировке. При этом он обычно пытается выбрать ту транзакцию, откат которой будет менее болезненным для системы в целом. Будем называть эту сессию «жертвой взаимоблокировки».
Сессия, выбранная «жертвой взаимоблокировки» получает соответствующее сообщение об ошибке.
При откате транзакции «жертвы» автоматически снимаются все установленные ей блокировки, что позволяет остальным сессиям продолжить свою работу.
Следует учитывать, что во взаимоблокировках могут участвовать несколько (более двух) сессий 1С:Предприятия. Причем, одна и та же причина может приводить к возникновению разных (по конфигурации и по сложности) взаимоблокировок с различным количеством участников и блокировок между ними. Поэтому при анализе большого количества взаимоблокировок в системе всегда имеет смысл начинать с самых простых взаимоблокировок – с минимальным количеством участников и с самыми простыми схемами. Высока вероятность того, что устранив одну простую взаимоблокировку вы одновременно устраните несколько других – в том числе более сложных.
Другой важной особенностью взаимоблокировок является тот факт, что взаимоблокировка почти всегда «распределена» по нескольким различным строкам кода конфигурации. При этом на начальном этапе анализа пользователю известна только одна строка кода. Это может быть, например, последняя строка, выполненная «жертвой» перед тем, как ее транзакция была отменена менеджером взаимоблокировок (эта строка доступна в информации об ошибке) или строка кода конфигурации, которую выдал ЦУП в дереве аналитической информации.
При этом причина взаимоблокировки (ошибка, приводящая к ее возникновению) может находится совсем в другом месте исходного кода. Это создает определенные трудности при анализе и устранении взаимоблокировок.
Известны следующие типичные причины возникновения взаимоблокировок в системах на платформе 1С:Предприятие 8:
Повышение уровня блокировки ресурса в рамках одной транзакции
Захват ресурсов в разном порядке
Неоптимальная работа запроса
Ошибка блокировок при работе внутренних механизмов MS SQL Server
В настоящей статье будут рассмотрены особенности возникновения этих видов взаимоблокировок, объяснены причины, по которым они возникают, и даны рекомендации по анализу и устранению этих причин.
Целиком статья про анализ блокировок в 1С расположена: http://1cexpo.ru/metodiki/31-analiz-i-ustranenie-vzaimoblokirovok.html |