Skip to main content

Элемент "Дерево блокировок"

Дерево блокировок - визуальный элемент, используемый для анализа конфликтов блокировок 1С. Дерево блокировок является вариантом диаграммы Ганта или диаграммы timeline ориентированных на отображение нескольких конфликтующих блокировок 1С.

Дерево блокировок

Скриншот №1!

1 - Область отображения периода

Временная шкала событий, отображаемых в дереве блокировок. Соответствует параметру "Длительность интервала".

2 - Серверный вызов блокировки

Информация о серверном вызове "родителе" блокировки. В области описания выводится имя пользователя и номер сеанса 1С. Если в конфликте блокировки задействовано несколько серверных вызовов из одного сеанса, они все выводятся в одной строке.

3 - Транзакция блокировки

Информация о транзакции, в которой установлена блокировка. В области описания выводится имя пользователя и номер сеанса 1С. Если в конфликте блокировки задействовано несколько транзакций из одного сеанса, они все выводятся в одной строке.

4 - Блокировка

Информация о блокировке. В области описания выводится имя пользователя, номер сеанса 1С и режим блокировки. Каждая блокировка выводится в отдельной строке. Выводятся первые 10 значений блокировки. Если фактически их больше, их количество будет указано в конце списка.

5 - Конфликт блокировок

Стрелка указывает на конфликт блокировок. Начало стрелки - блокировка виновник, конец - блокировка жертва.

6 - Масштаб

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

Цветовая индикация

Каждый интервал отображается в одном из четырёх цветов.

ЦветЗначение
ЗелёныйОперация выполнена успешно.
Серверный вызов завершен успешно, если в ТЖ для него не найдено связанное событие EXCPCNTX.
Транзакция завершена успешно, если по данным ТЖ она закрыта функцией CommitTransaction.
Блокировка установлена успешно, если в ТЖ для неё не найдено связанного события TTIMEOUT и TDEADLOCK.
ЖёлтыйИнтервал ожидания предоставления блокировки, если в итоге блокировка была предоставлена успешно.
КрасныйОперация не выполнена или выполнена с ошибкой.
Серверный вызов завершен с ошибкой, если в ТЖ для него найдено связанное событие EXCPCNTX.
Транзакция завершена не успешно, если по данным ТЖ она закрыта функцией RollbackTransaction.
Блокировка не установлена, если в ТЖ для неё найдено связанное событие TTIMEOUT или TDEADLOCK.
БелыйНе удалось найти все данные для отображения. Может применяться только для информации о серверных вызовах. Например, если на момент построения дерева серверный вызов ещё не завершён или о нём нет информации в ТЖ.

Подробности

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

Серверный вызов

Скриншот №4! Выводится:

  1. Длительность
  2. Контекст
  3. Текст ошибки (если была)

Транзакция

Скриншот №3! Выводится:

  1. Статус: Commit или Rollback
  2. Длительность
  3. Контекст

Блокировка

Скриншот №2! Выводится:

  1. Моменты времени запроса на блокивроку, установки блокировки, снятия блокировки.
  2. Статус: Успешно или Ошибка (тип ошибки)
  3. Длительность ожидания
  4. Длительность удержания
  5. Признак эскалации
  6. Пространство в терминах 1С
  7. Режим блокировки: Shared или Exclusive
  8. Описание полей и значений блокировки, участвующих в конфликте, в терминах 1С. Выводится только конфликтующая блокировка, а не все блокировки события TLOCK.
  9. Контекст установки блокировки

Особенности логики построения

  1. Построение дерева выполняется рекурсивно от события TLOCK. На каждой итерации для событий TLOCK находятся блокировки, которые удерживают требуемую блокировку. Это обуславливает две особенности:
  • Дерево строится только "вверх", т.е. оно включает только виновников исходного события TLOCK. Если исходная блокировка была для кого-то виновником, в дереве этой информации не будет.
  • При построении дерева на основании событий TTIMEOUT и TDEADLOCK, первым шагом находится связанное событие TLOCK, и затем от него строится дерево виновников. Таким образом, для событий TDEADLOCK возможны ситуации, когда в дереве отображаются не все участники взаимоблокировки, а только те, которые стали причиной ожиданий прерванной транзакции.
  1. Построение дерева выполняется фактически без учета значений свойства WaitConnections, т.к. оно зачастую не содержит всех участников цепочки блокировок. Вместо этого алгоритм построения получает информацию обо всех блокировках удерживаемых на момент попытки установки блокировки жертвы и затем сверяет их пространства и поля блокировок с исходной. Это объясняет, почему в некоторых случаях свойство WaitConnections жертвы может не совпадать с виновником, отображаемым в дереве.