Текущие блокировки MS SQL server и 1С

Ввиду своей деятельности, мне часто приходится рассказывать про различные аспекты оптимизации и в том числе про блокировки. Очень часто слушатели задают следующие вопросы: Как посмотреть в реальном времени, какие именно данные сейчас заблокированы? Как понять, что сейчас заблокировано в терминах 1С? Если гранулярность блокировки страница, как увидеть, какие данные в ней находятся? Раньше приходилось отвечать, что инструмента, который показывает все вышеописанное, сейчас просто нет. Но потом мне это надоело, и я решил сделать собственный инструмент, который позволяет ответить на все вышеописанные вопросы.
Данный инструмент создавался в первую очередь для слушателей курса по оптимизации, для демонстрации, какие блокировки, когда и на что будут установлены.
Инструмент не является конкурентом для ЦУП или облачного сервиса анализа блокировок, он предназначен в первую очередь для обучения и ознакомления с работой блокировок, а не для анализа ожиданий на блокировках.
Все инструменты на текущий момент показывают только информацию постфактум, когда ожидание уже случилось. Данный инструмент показывает ситуацию на текущий момент.
В некоторых случаях обработка может использоваться и для задач по оптимизации. Например, при переводе конфигурации на упр. режим, можно будет легко и быстро посмотреть, на какие именно записи была наложена управляемая блокировка.
Также можно в моменте посмотреть, что именно сейчас блокирует каждый из пользователей, и кто кого ждет.
Сразу скажу что обработка работает не быстро, но такая цель и не ставилась. При этом следует учитывать, что работа возможна только с СУБД MS SQL Server и только в управляемом приложении.
Если ожидание идет на сервере СУБД, тогда можно увидеть, на каком именно ресурсе идет ожидание, в колонке статус будет значение «Ожидание». Для блокировок 1С посмотреть, на чем идет ожидание, не получится, т.к. сервер 1С просто не пишет эту информацию в логи в момент ожидания, она туда попадает только после того, как ожидание завершится.

Прикрепленные файлыcurrent_blocking_mssql_1c.zip ( 239.81 килобайт ) Кол-во скачиваний: 467

Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных «zup» заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы
sys. databases HRESULT=80040E14, SQLStvr: Error state=2, Severity=11,native=9002, line=1
или
Ошибка СУБД:
Microsoft OLE Provider for SQL Server: The transaction log for database «DataBase” is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column is sys.database
HRESULT=80040E14, SQLSTATE=4 2000, native=9002
Решение:
1. Посмотрите сколько свободного места осталось на дисках, может его нет и логу некуда записаться…
2. Это ошибка Microsoft SQL Server — переполняется лог транзакций и не очищается. Урезать его возможно различными способами, в том числе и с помощью стандартной оснастки, но не всегда данная операция получается, и размер файла лога остается прежним. Как вариант предлагаю следующее решение из двух строчек:
для использования убрать символ _

Оставьте комментарий