Как я диагностировал проблемы блокировок

22.09.15

База данных - Инструменты администратора БД

Что делать, если какой-то сеанс наложил блокировку и мешает всем работать? Как выяснить, какой сеанс необходимо убить, чтобы проблема ушла? Такая проблема для администраторов достаточно распространенная, но по непонятным для меня причинам в интернете я не смог найти типового решения данной проблемы. А оно есть!

Всем привет! 

На днях на работе столкнулся с проблемой блокировок, а именно стало появляться сообщение "Конфликт блокировок при выполнении транзакции. Превышено максимальное время ожидания предоставления блокировки".

Очевидно, что здесь нет проблемы взаимоблокировок, здесь просто какой-то сеанс поставил блокировку и "забыл" убрать. При этом проблема грозила серьезными последствиями - не проводился документ Реализации товаров и услуг. В базе единовременно работает около 100 человек, и невозможно выполнить типовую и частую операцию!

Решения было два - перезагрузка сервера или поиск сбойного сеанса. Первое решение простое и быстрое, но, как здесь уже кто-то писал - ребутать сервер можно до тех пор, пока тебя не уволят. Решил пойти по второму пути.

Первый день - проблема появилась днем, поначалу казалось, что проблема в удаленном пользователе, который засел в Конфигураторе. Было похоже, что просто выполнение остановилось на точке, и блокировка, естественно, не снялась. Через пару часов удалось освободить конфигуратор, но проблема не ушла. Убивать принудительно конфигуратор было крайне нежелательно, возможно, в нем работали. После этого в ход пошел гугл. Нашел статью на этом сайте, в которой пишется, как найти блокировки в СУБД MS SQL, проверил, блокировок на уровне СУБД не было. Странно. Далее были попытки настроить тех. журнал. Настроил, а дальше что? За 15 минут пара гигов логов! Как их читать, что искать? Неизвестно.

Нашел статью, как посмотреть, что заблокировано через SQL Trace. Да даже если найду, дальше что? Мне нужен сеанс!

Ближе к 16:00, когда я понял, что дальше тянуть нельзя, я сделал ребут. В надежде, что такого больше не повторится (а это был первый случай за полгода работы), вздохнул с облегчением, все заработало. А зря... Второй день - та же ситуация. Копался часа полтора, опять непонятные попытки гуглить и прочее. Без результатов. Ребут. Под конец дня произошло еще раз. Ну, думаю, замечательно, спокойно приеду домой и посижу, поковыряюсь. Приезжаю домой, все уже нормально. Печально.

На третий день глянул вебинар, рассказали про интересный и эффективный способ поиска проблемы. Запомнил, но проблема больше не возникала. Прошла неделя и вот оно - опять блокировки! Потираю руки и начинаю действовать.

Первое - настраиваем журнал. Да, без него никак, но теперь я умею его читать. Ставим два события: первое TLOCK, второе TTIMEOUT. Первое отображает все события блокировки, второе показывает блокировки, которые не смогли установиться в отведенное им время. На самом деле, скорее всего, достаточно только TTIMEOUT.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="false"/>
<log location="D:\Logs" history="168">
<event>
<eq property="name" value="tlock"/>
</event>
<event>
<eq property="name" value="ttimeout"/>
</event>
<property name="all">
<event>
<eq property="name" value="tlock"/>
</event>
<event>
<eq property="name" value="ttimeout"/>
</event>
</property>
</log>
</config>

Копируем файл техжурнала в отведенное место, летим в программу, вызываем блокировку, получаем сообщение и убираем или переименовываем файл техжурнала. Нам же не нужны тонны инфы о других блокировках!

Переходим в папку rphost_PID, находим текстовые файли и делаем поиск по слову TTIMEOUT. Видим строку:

53:16.789126-0,TTIMEOUT,5,process=rphost,p:processName=*****,t:clientID=16536,t:applicationName=1CV8,t:computerName=ASUSM,t:connectID=17272,SessionID=2242,Usr=*******,WaitConnections=8239

К слову, папок rphost_PID может быть несколько, все зависит от того, сколько рабочих процессов запущено на сервере.

А дальше все просто: смотрим в конец строки - WaitConnections = 8239, это наш номер СОЕДИНЕНИЯ. Заходим в консоль сервера, переходим в Соединения, находим этот номер и смотрим номер сеанса. В моем случае на одного пользователя было два сеанса - сбойный и какой-то другой. Грохнул сеанс, на который указывал техжурнал. И о чудо! Все заработало, радости нет предела! Но, как выяснилось позже, сеанс был не зависший :), в нем работали. Поэтому на будущее - желательно связываться с пользователем и предупреждать.

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

блокировки технологический журнал

См. также

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7856    58    23    

69

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8871    42    5    

74

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10460    36    25    

61

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188041    1140    0    

912

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32702    106    152    

73

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72804    627    45    

85

Инструменты администратора БД Системный администратор Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    62834    94    59    

79

Инструменты администратора БД Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    9840    7    4    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 2712 22.09.15 23:17 Сейчас в теме
Автору крайний незачет
В статье так и не раскрыта проблема блокировки
Henistaromin; cleaner_it; Borometr; user1170885; GutaGroup; aleks.public; skalex; bugagashenka; Antonov.AV; ZDmitry83; awk; DoctorRoza; Bukaska; ivanov660; Perrojka; u_n_k_n_o_w_n; CTAKAH; Turn123; Йожкин Кот; nSpirit2; ZOMI; JIeHIH; emakei; DERL; shalimski; +25 Ответить
2. mpeg1989 131 23.09.15 07:25 Сейчас в теме
(1) CheBurator, я и не планировал раскрывать проблемы блокировок, эта статья для администраторов, которые столкнулись с блокировкой и не знают, как вычислить сеанс, который необходимо убить.
3. LineykaSBK 6 23.09.15 08:17 Сейчас в теме
CheBurator,
По поводу раскрытия проблемы блокировки. Зачем раскрывать проблему, их может быть на каждого мильон. И раскрытие авторской проблемы не поможет сотням столкнувшимся с точно таким же сообщением, потому что за этим сообщением про блокировки может быть, как написал выше сотни причин.
Автору спасибо, Буквально сегодня случилась проблема блокировки. Набрал в поиске и сразу выскочила статья данная. Разбираться в конкретно моем случае пришлось позже, главное убрал без болезненно проблему.
В моем случае проблема была в неграмотной настройке обмен РИБ хозяином базы, несколько настроек РИБ запускались каждые пол часа, абсолютно игнорируя поочередность.
.
user1972051; Мах; +2 Ответить
4. mikmike 9 23.09.15 08:26 Сейчас в теме
Сколько раз это проработало? т.е. есть ли статистика
5. mpeg1989 131 23.09.15 08:48 Сейчас в теме
(4) mikmike, статистики нет, пока только один раз такое было, буду вести наблюдение дальше.
6. Betis 26 23.09.15 09:08 Сейчас в теме
А каким образом на одного пользователя получилась 2 сеанса? и какова первопричина блокировок? Первоначальная версия о точке останова в конфигураторе выглядит как-раз правдоподобной.
8. mpeg1989 131 23.09.15 09:14 Сейчас в теме
(6) Betis, переключения между Wi-Fi и локалкой. Менеджер сидит на проводе, так работает быстрее. Потом происходит что-то странное, хватает ноут, сеть перекидывается на Wi-Fi, 1С вылетает, сеанс остается на сервере.
7. elizarovs 83 23.09.15 09:08 Сейчас в теме
Давайте поднимем статью до пособия. Для этого нужна более четкая "ориентация на местности". Как минимум, нужно указать, журнал какой программы нужно настраивать. Microsoft SQL Server Management Studio? Где в ней найти эту настройку? Где искать папки? В программе, в Винде,...? А вопрос, конечно, горячий.
Darkoder; user1428850; +2 Ответить
9. mpeg1989 131 23.09.15 09:19 Сейчас в теме
(7), вопрос очень горячий, очень жестко поджимают сроки решения таких задач, поэтому тонна инфы будет лишней, нужна маленькая быстрая инструкташка, хотя в целом такую идею можно рассмотреть - вечером что-нить придумаю. Технологический журнал настраивается для сервера 1С, файл журнала надо кидать в C:\Program Files\1cv8\conf если сервер 64-разрядный и 8.3, в C:\Program Files (x86)/1cv8/conf если сервер 32-разрядный, имя должно быть logcfg.xml. При помещении этого файла в ту папку начинают автоматически писаться логи. Пишутся в моем случае в D:\Logs, но если мой текст отредактировать, то писать может куда угодно.
Darkoder; Мах; +2 Ответить
32. bugagashenka 203 08.11.19 20:48 Сейчас в теме
(7)тут SQL нет от слова совсем. Блокировка управляемая.
Чтобы найти ее нужно в ТЖ настроить события TLOCK и TTIMEOUT. После таймаута сразу идет блокировка жертвы. Смотрим WaitConnections, Region и Lock. По области ищем соединение из WaitConnections. Тут же можно найти контекст.
Искать все это можно с помощью скриптов Баш. Каталог логов указывается в настройке ТЖ.
Очень подробно и доступным языком Виктор Богачев рассказывает все это на своем курсе.
10. Andrefan 23.09.15 09:52 Сейчас в теме
Администратор конечно молодец, что научился оперативно искать проблемный сеанс, но данную проблему следует делегировать программистам, чтобы те разбирались с избыточными блокировками.
12. mpeg1989 131 23.09.15 10:22 Сейчас в теме
(10) Andrefan, сейчас буду наблюдать за тем, какие данные блокируются. Если постоянно будет один и тот же регистр и кусок кода - значит проблема в нем и буду писать программистам.
11. asved.ru 36 23.09.15 09:55 Сейчас в теме
В конфигурациях, основанных на БСП, серверный вызов делается ежеминутно обработчиком ожидания. Кроме того, раз в пять минут контрольный вызов выполняет сама платформа.

Соответственно для сведения проблемы потерянных сеансов к статусу незначительной достаточно установить время перевода сеанса в спящее состояние в указанных рамках. Блокировки спящих сеансов платформа при необходимости игнорирует.

13. mpeg1989 131 23.09.15 10:24 Сейчас в теме
(11) asved.ru, очевидно из-за этого у меня блокировка сама снялась, когда я доехал до дому на второй день. Но, самое интересное, что сеанс, наложивший блокировку, не был спящим - под ним работали.
33. bugagashenka 203 08.11.19 20:52 Сейчас в теме
(11)Как же, интересно, можно раздробить транзакцию с помощью обработчиков ожидания??? Управляемая блокировка накладывается только внутри транзакции и никак иначе.
14. nSpirit2 23.09.15 10:47 Сейчас в теме
Хорошо когда 100 пользователей. Если бы все так решали проблемы то боюсь мне бы пришлось искать отдельного человека прибивать сеансы. :D
18. mpeg1989 131 23.09.15 11:53 Сейчас в теме
(14) nSpirit2, естественно, что это борьба с синдромами, а не устранение проблемы. Но вот случись такая неприятность - первым делом надо сбить жар и удалить сеанс. После этого вычислять саму проблему. Если сразу полезут программисты, начнут кодить, обновлять, выкидывать внепланово всех из базы, даже тех, кому это не сильно мешало, то тут есть риск, что после этого их тоже выкинут, куда-нить в сторону центра занятости.

Кстати, в этом же журнале видно какую таблицу заблокировали. Правда, для этого надо будет вести TLOCK.
15. urcont 23.09.15 11:13 Сейчас в теме
Может имеет смысл открыть консоль "Администрирование серверов 1С-Предприятие", посмотреть количество захваченных, время вызова и т.п. и определить негодяя, не?
conductor; x_x; sCHTASS; cleaner_it; IT_Avito; +5 Ответить
16. LineykaSBK 6 23.09.15 11:35 Сейчас в теме
(15) urcont, "и определить негодяя, не?"
Не, консоль не всегда верно отражает данные. Есть такие вещи, когда в консоле не найдешь сеанса, а он собака есть и блокирует. ИНогда помогает чистка кеша, иногда не помогает :)
20. urcont 23.09.15 12:37 Сейчас в теме
(16) LineykaSBK, В консоли есть блокировки, можно посмотреть все, можно по сеансам.
(17) по моему мнению консоль тот самый стандартный механизм. Кому-то нужно полчасика, чтобы определить сеанс, кому-то гораздо меньше времени. Там есть поле "Захвачено СУБД", в котором все будет видно при длительной транзакции.
Смотрим пользователя и в журнале регистрации видим, что он, собака, делает. Может себестоимость перепроводит.

Понятно, что у Вас будет более точная информация, но стоит ли все усложнять?
"Копируем файл техжурнала в отведенное место, летим в программу, вызываем блокировку, получаем сообщение и убираем или переименовываем файл техжурнала. Нам же не нужны тонны инфы о других блокировках!" - копируем, бежим, летим, переименовываем... как-то слишком сумбурно.
23. mpeg1989 131 23.09.15 12:45 Сейчас в теме
(20) urcont, В блокировках в консоли ничего не было, ни в сеансах, ни в списке блокировок. Про захвачено СУБД увидел впервые, если еще раз такое возникнет проверю, но в любом случае перепроверю технологическим журналом. Сумбурно выглядит только если это описывать. Когда делаешь - ничего особо сумбурного.
34. bugagashenka 203 08.11.19 20:53 Сейчас в теме
(23)Захвачено СУБД это сугугбо запрос к СУБД и никак не связаны с управляемыми блокировками
31. mpeg1989 131 22.03.19 08:51 Сейчас в теме
(20) ну что ж, я вернулся, поднабрался ума и готов еще разочек пообщаться. Начнем. По ошибке видно, что блокировка управляемая. Захвачено субд показывает время выполнения запросов на уровне субд, а не 1с. В большинстве случаев оно будет совпадать, но может быть вариант, что кто-то формирует тяжелый отчет никому не мешая, а в это время другой перепроводит документы, создавая кратковременные захваты субд. Кого грохать? А если грохнешь сеанс собственника бизнеса, он и так ждал свой мега отчет 15 минут, то он грохнет тебя.

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

Плюс подхода еще и в том, что остается инфа для прогеров для дальнейшей оптимизации.
(23)
17. mpeg1989 131 23.09.15 11:45 Сейчас в теме
(15) urcont, я использую стандартный механизм, созданный специально для обнаружения проблем, за минут 5 с абсолютной точностью вычисляю сеанс и удаляю его. Вы же предлагаете открыть консоль, наблюдать за сеансами с полчасика и затем выщелкивать подозрительные сеансы по одному, в надежде, что именно этот сеанс косячит. Не знаю, наверное, не...
22. Betis 26 23.09.15 12:44 Сейчас в теме
Во(17) Вы конечно молодец что нашли способ "потушить пожар",
но видимо не знаете что в консоли кластера есть колонка "захвачено упр" в котором отображается id сеанса виновника,
таким образом совершенно не нужно тратить полчаса, информацию можно получить моментально.
Если конфигурация работает в автоматическом режиме, то можно еще использовать Мониторинг активности в составе SQL managment studio, там кроме
номера сеанса виновника можно увидеть текст запроса на языке SQl который вызвал блокировку. Эта информация может помочь программистам.
SashaSashaSashka; tdml; u_n_k_n_o_w_n; cleaner_it; +4 Ответить
25. Gilev.Vyacheslav 1917 23.09.15 18:42 Сейчас в теме
(22) Betis, не особо - надо знать контекст 1с
27. Betis 26 23.09.15 20:33 Сейчас в теме
(25) Gilev.Vyacheslav, Я же и говорю что может помочь, а не обязательно поможет всем). Ваш сервис тоже весьма хорош, но он же не покажет информацию в реальном времени.
35. bugagashenka 203 08.11.19 20:55 Сейчас в теме
(17)Вам надо не сеанс удалять, а расследовать контекст виновника, на котором возникает избыточная блокировка. Оптимизировать и укорачивать транзакцию. Или вообще некоторые механизмы выносить из нее
19. Gilev.Vyacheslav 1917 23.09.15 12:33 Сейчас в теме
(0) вы не нашли наши бесплатные инструменты для диагностики таких проблем

или религиозные убеждения? :)
Прикрепленные файлы:
balashov; DivS; Serg O.; tdml; ojiojiowka; DoctorRoza; LineykaSBK; cleaner_it; Betis; +9 Ответить
21. mpeg1989 131 23.09.15 12:39 Сейчас в теме
(19) Gilev.Vyacheslav, натыкался, но там вроде как cf надо внедрять в конфу. Мне-то религия позволяет :), да вот только я на подчиненном узле РИБа сижу и в целом по конфе ничего не решаю.
24. Gilev.Vyacheslav 1917 23.09.15 17:57 Сейчас в теме
(21) нет там такого с внедрением cf, читайте инструкцию http://www.gilev.ru/setuplatch/

руками вручную парсить ТЖ нашли силы, а автоматизированно скормить логи, чтобы за Вас 1С-ка сама бесплатно распарсила - нет




26. mpeg1989 131 23.09.15 19:09 Сейчас в теме
(24) Gilev.Vyacheslav, поторопился, пользователи атаковали со всех сторон, поэтому не вник в инструкцию. А вебинар был плановый, поэтому его смотрел вне режима аврала и запомнил.
28. comol 5107 24.09.15 10:26 Сейчас в теме
DBCC OpenTran :). Если там больше N минут секунд просто убиваем этот сеанс в MS SQL.
29. GY!BE 24.09.15 16:30 Сейчас в теме
У автора была зависшая блокировка.
Автор настроил ТЖ и нашел ее.
НУНИЧЕГОСЕБЕ!
30. mpeg1989 131 24.09.15 20:07 Сейчас в теме
(29) GY!BE, пжалыста ссылку в студию, где было бы понятно, как это сделать без ребута (кроме сервиса Гилева, я на него натыкался, но неправильно понял инструкцию). А то все такие язвительные, аж краска на стенах сворачивается, а как помочь, так только и знают "ребутни сервер".
Мах; ulenergo; fzt; olegmedvedev; Дмитрий74Чел; +5 Ответить
36. rozer 311 06.12.22 17:21 Сейчас в теме
А дальше все просто: смотрим в конец строки - WaitConnections = 8239, это наш номер СОЕДИНЕНИЯ. Заходим в консоль сервера, переходим в Соединения, находим этот номер и смотрим номер сеанса.


нет, нужно найти событие виновника блокировки - TLOCK где t:connectID=8239 а номер сеанса смотреть уже в SessionID
Оставьте свое сообщение