В новом формате хранения файл журнала регистрации может достигать сотен гигабайт. Время выполнения выборки по нему будет очень большим, при этом возникает проблема: останавливается работа всех пользователей.
Признаками данной проблемы являются:
-
Невозможно зайти в информационную базу.
-
Почти 100% активность диска, на котором расположен журнал регистрации и активное чтение файла журнала регистрации процессом rmngr.
Данный пункт можно проверить с помощью монитора ресурсов (Диспетчер задач — Производительность — Открыть монитор ресурсов) на вкладке “Диск”.
В группе “Запоминающие устройства” нужно обращать внимание на колонку “Активное время (%)”.
В группе “Работа диска” нужно обращать внимание на колонки “Чтение” и “Файл”. Можно отсортировать по колонке “Чтение”. Среди первых строк с максимальной скоростью чтения будет процесс rmngr. Далее нужно смотреть имя читаемого файла, оно будет соответствовать журналу регистрации определенной информационной базы. -
В консоли администрирования кластера серверов 1С:Предприятие в списке сеансов почти у всех пользователей будет большое и приблизительно одинаковое значение в колонке “Захвачено СУБД” или в колонке “Время вызова (текущее)”.
При обнаружении проблемы нужно:
-
Запомнить УИД ИБ, к которой выполняется чтение процессом rmngr.
-
Запустить сбор технологического журнала на события EXCP, если еще не запущен.
-
Сделать экспорт всех сеансов на проблемном сервере ИЛИ на проблемной ИБ с помощью консоли администрирования кластера серверов 1С:Предприятие, на случай, если понадобятся дополнительные данные для анализа.
-
Перезапустить службу 1С:Предприятие.
-
Собрать технологический журнал на время перезапуска сервера 1С:Предприятие.
-
Проанализировать технологический журнал: выполнить поиск слов “ВыгрузитьЖурналРегистрации” или “UnloadEventLog”.
Пример:
29:40.069000-0,EXCP,4,process=rphost,p:processName=ib_accounting,t:clientID=114396,t:applicationName=1CV8C,t:computerName=COMP,t:connectID=109127,SessionID=1,Usr=ИвановИИ,AppID=1CV8C,ClientID=114389,Exception=NetDataExchangeException,Descr=Передача данных прервана по инициативе принимающей стороны.,Context=’Форма.Вызов : ВнешнийОтчет.АнализЖурналаРегистрации.Форма.Модуль.ФоновоеЗаданиеЗапустить
ОбщаяФорма.ФормаОтчета.Форма : 1242 : ВариантыОтчетов.СформироватьОтчетВФоне(ПараметрыФормированияОтчета, РезультатФоновогоЗадания.АдресРезультата);
ОбщийМодуль.ВариантыОтчетов.Модуль : 2544 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
ОбщийМодуль.ВариантыОтчетов.Модуль : 2060 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
ВнешнийОтчет.АнализЖурналаРегистрации.МодульОбъекта : 64 : ВыгрузитьЖурналРегистрации(ТЗ,Отбор,Колонки);’
По этой строке можно сказать кто: ИвановИИ, где (на каком компьютере): COMP, в какой информационной базе: ib_accounting запустил анализ журнала регистрации.
Проблема точно воспроизводится на версиях платформы: 8.3.9.2170, 8.3.9.2233.
+ за понятный мануал решения конкретной проблемы. Хотя у нас права на ЖР есть только у одного
Если запустили просмотр ЖР из обычного приложения как определить сеанс?
Если штатную форму просмотра журнала регистрации открыли, то интересно как ловить это техножурналом?
На эту тему я написал в 1С пожеланиеhttps://partners.v8.1c.ru/forum/t/1645592/m/1645592 , чтобы дали возможность ограничивать длительность выборки.
(3) Определение сеанса не зависит от типа клиента. Важно каким образом запущен анализ журнала регистрации. На моих экспериментах, к недоступности информационной базы приводило только выполнение метода ВыгрузитьЖурналРегистрации. Анализ журнала регистрации штатной формой или из конфигуратора не приводили к подобным проблемам.
(4) На моих экспериментах, к недоступности информационной базы приводило только выполнение метода ВыгрузитьЖурналРегистрации. Анализ журнала регистрации штатной формой или из конфигуратора не приводили к подобным проблемам.
(7) Это потому что использовалась динамическая выборка или низко селективный фильтр. Динамическая выборка выбирает только до заполнения видимого числа строк журнала (+ возможно одну страницу). Поэтому в среднем она намного быстрее завершает выборку. Но ведь можно и очень редкие события отбирать или статическую (полную) использовать.
(4) думаю надо анализировать события system или call
(8) Опечатка. Не «динамическая выборка или низко селективный фильтр», а «динамическая выборка и низко селективный фильтр, т. е. в таблице часто встречаются строки ему удовлетворяющие».
(9) События CALL, SCALL записываются в технологический журнал после их выполнения. По этим событиям можно анализировать у кого анализ журнала регистрации завершился успешно. Имя искомого метода «fetchLogEntriesDataBkwd».
P.S.
Имя метода «fetchLogEntriesDataBkwd» получено экспериментальным путем, теоретического или официального подтверждения не имею.
39:43.263000-28625997,CALL,2,process=rmngr,p:processName=RegMngrCntxt,p:processName=ServerJobExecutorContext,t:clientID=1711,t:applicationName=ServerProcess,t:computerName=basesrv,Interface=2ebdaa8c-4a75-48f7-94bf-8206623aa9bb,IName=IClusterLogMngr,Method=2,CallID=2267204,MName=fetchLogEntriesDataBkwd,Memory=64547,MemoryPeak=64641,InBytes=0,OutBytes=0
rphost
39:43.272000-28627998,SCALL,3,process=rphost,p:processName=cti_accounting_3,t:clientID=11866,t:applicationName=1CV8C,t:computerName=RITC3,t:connectID=11511,SessionID=1,Usr=АрхангельскийПВ,AppID=1CV8C,ClientID=12111,Interface=2ebdaa8c-4a75-48f7-94bf-8206623aa9bb,IName=IClusterLogMngr,Method=2,CallID=2267204,MName=fetchLogEntriesDataBkwd
(11) system пробовали анализировать?
(12) Нет, не пробовал, т.к. в боевом режиме 1С не рекомендует его использовать, поэтому практической пользы не будет.
Мое небольшое исследование на эту тему привело к такому содержнию файла настройки ТЖ:
Показать
class=»LogMngrSQLiteData» — новый формат ЖР.
class=»LogMngrData» — старый формат ЖР
Платформа 8.3.10.2561. Тестировал на файловом и серверном режиме. В конфигураторе, в тонком клиенте, в толстом клиенте (обычное приложение). На старом и новом форматах журнала регистрации. Просмотр встроенными средствами и выборка методом ВыгрузитьЖурналРегистрации().
Для серверного режима не выводит базу и пользователя, но выводит clientID. Так что дополнительно надо настраивать событие CONN.
Для ЖР в формате SQLite выводит в ТЖ исполняемый запрос.
(14) Эти события в ТЖ будут попадать только после выполнения?
(15) не проверял, т.к. не было под рукой тестовой базы с ЖР большого объёма. Но длительность событий в некоторых случаях точно была 0, что наводит на мысль.
А зачем знать пользователя?
(17) Чтобы у него узнать причину анализа журнала регистрации и предотвратить в дальнейшем. Анализ большого журнала регистрации с «плохими» (селективным) отбором может приводить к недоступности информационной базы.
(18) Ну узнали и что дальше? Базы (база это частный случай) станут доступными?
(7) Подобная же ошибка возникала при обычном отборе в списке журнала регистрации. Отбор по пользователю и объекту метаданных. Объем журнала регистрации был порядка 60гб.
На текущий момент решаем проблему регламентным урезанием журнала регистрации.
(10) При выборке с параметром «Отобрать сразу» также сталкивались с зависанием сервера.
Интересно можно ли устранить блокировку работы 1С, при запросе к журналу регистрации.
1С не рекомендует использовать новый формат журнала регистрации для высоконагруженных баз.
Тоже долгое время мучались с этим. Иногда пользователь не виноват, порой жмут кнопку какого-нибудь отчета или гиперссылку из документа, а она автоматически начинает делать отбор по ЖР. Пока не перевели на старый формат решали это через конфигуратор, там выставили двум-трем админам права просмотра ЖР и все.
(19) Доступность информационной базе вернет только завершение отбора по журналу регистрации или перезапуск сервера 1С:Предприятие. А для того, чтобы подобное не повторялось нужно знать кто, зачем и почему это сделал.
(15) Проверил на серверной базе с большим ЖР старой версии. К сожалению при использовании метода ВыгрузитьЖурналРегистрации() событие выводится в журнал после успешного выполнения(
(25)
1. Не только. Журнал регистрации пишет менеджер кластера. Можно перезапустить именно его, а не сервер в целом.
2. Если не хотите что бы повторялось, то отключите журнал регистрации.
P.S.
Сокращу наш диалог.
Журнал регистрации — это инструмент. У нас им пользуются ВСЕ!!! Баз чуть больше чем много. Размеры журналов превышают 20 гигобайт. Задача нашего отдела — обеспечение бесперебойной работы. С чем мы успешно справляемся. А вы на мой взгляд занимаетесь маскировкой проблемы (задачей бессмысленной и вредной). Вам надо не тех. журнал настраивать, а оборудование прокачивать.
(27) Видимо журналы у вас в старом формате?
(28)Сергей, мое почтение. В новом… У нас оборудование соответствует задаче.
(27) Тогда думаю многим было бы интересно узнать подробнее о том, как достичь такого. Мне не удавалось. Предлагаю начать с примера отбора по журналу размером 20ГБ в режиме «Отобрать сразу» по «Данные=<Какой то древний элемент справочника>». Интересуют сколько времени это выполняется и скрины списка сеансов в базе из консоли кластера через 1-2-3 минуты.
(30) Боюсь это не возможно. По причинам:
1. Раскрытие параметров оборудования приведет к моему увольнению
2. Эксперименты в рабочем контуре и публикация результатов приведут к моему увольнению
3. У меня трое детей — мне их кормить надо.
У нас отдел информационной безопасности не студенты. Я уже и статьи-то на инфостарт перестал публиковать, по соображениям не технического характера…
По слухам СХД нам обошлось как две теслы…
(31)
1. Я не просил параметры оборудования.
2. Подойдет и реальный пример такого рода. Наверняка вы иногда проводите расследования типа «кто мог установить неверное значение реквизита в документе/контрагенте?». Вот хотелось бы узнать сколько времени выполняется отбор по значению поля «Данные». Можно даже без «отобрать сразу». Скриншоты из консоли кластера с замазанными именами пользователей кажется не должны подрывать безопасность.
(32)
Запуск в тестовом контуре:
Размер лога 21.9 Гб
Первый запуск
Загрузка данных журнала выполнена за 0:10:30
Повторный запуск
Загрузка данных журнала выполнена за 0:01:01
. Очередь к диску (средняя) 0.3 Падение производительности было заметно (если и было) только на одном кластере. Запуск был на тестовом контуре 256 Гб оперативки, старый СХД (но на ССД дисках) 16 физических ядер (32 логических) 2.4
С рабочем контуром не получится логи обрезаны на выходных.
Анализ журнала производился твоей обработкой, по данным последний раз обновленным более года назад. В ЖР по ним событий не найдено.
(33) Так тут центральным является вопрос снижения параллельности работы пользователей. Поэтому тестовые базы не очень наглядно проверять.
(34) Тут вопрос вообще не технический. Тут вопрос административный: «Как организовать работу»?
Я начал писать сюда с вопроса: «Зачем знать пользователя»? Написал я это лишь потому, что смысла в знании не вижу — это не повысит паралельность. Никаких проблем с журналом нет, при соблюдении следующих условий:
1. Определен круг пользователей допущенных до журнала.
2. Определен разумный период который хранится в журналах рабочих базах.
3. Базы распределены по кластерам (за ЖР отвечает менеджер кластера).
4. Журналы режутся.
(36) В этим с предыдущими высказываниями почти полностью согласен. Есть же правило — что не запрещено, то разрешено. Если не запретили и не научили как надо, то сами виноваты. А если такие страшные последствия, то запретите всем «непродвинутым» и делайте анализ сами по запросу. Это этого пользы будет больше, чем потом с гордым видом и горящими глазами искать виноватых и сулить им всяческие кары — отлучение от церкви, премии, корпоративных пьянок (нужное подчеркнуть) 🙂
(18) Вы не могли бы привести пример дальнейших действий после узнавания причины анализа ЖР? Как и характерный пример самой причины.
(37) Пример дальнейших действий: лишить пользователя прав на доступ к ЖР, проанализировать необходимость получения данных из ЖР для пользователя, просто сообщить об инциденте ответственному человеку со стороны заказчика.
Причина: компания разработала обработку, в которой ошибки и служебная информация записываются в ЖР, и сообщила заказчику, что всю информацию о работе обработки нужно получать из ЖР. Некоторые сотрудники заказчика решили проанализировать работу обработки.
(36) Очень здорово, когда есть возможность использовать СХД, SSD, на которых чтение 20Гб ЖР занимает 10 секунд. Но чаще всего пользователям не нужен доступ к ЖР и, конечно, правильным решением будет ограничение доступа.
Также встречаются заказчики, которые сильно против изменений в конфигурации, а в типовых решениях от фирмы 1С еще не вынесен в отдельную роль доступ к ЖР. Им достаточно просто рассказать об инциденте и провести разъяснительную беседу с пользователями.
Можете рассказать как вы обрезание ЖР: с помощью функций работы с ЖР, просто перемещает файл, напрямую работаете с файлом ЖР или что-то другое?
Нечего там анализировать. С новым форматом вы сделать ничего не сможете. Переходите на старый, он хотя и медленный, и на чтении систему грузит, но не виснет.
В некоторых случаях удобным решением может быть внешнее хранение ЖР.
Неужели кто-то пользуется штатным ЖР?..
У нас он везде отключен и сделан собственный на основе регистра сведений.
(39) У нас на кэш и журналы выделено N Гб. Когда место заканчивается (о чем нас предупреждает zabbix), мы делаем ночью:
net stop <service 1C name> — остановка сервера
move <1C folder> <1C folder>_<date> — переименование папки сервера 1С
XCOPY <1C folder>_<date>/*.lst <1C folder> — восстанавливаем все кроме логов
net sart <service 1C name> — запуск 1С. До этого момента даже на слабом сервере с IDE дисками 60 секунд не более пройдет
7z a -tzip <archive path><1C folder>_<date>.zip <1C folder>_<date>
Если кому-то нужна история, то мы ему в тестовом контуре даем копию базы и ее логи.
И 10:30 — это десять с половиной минут. Это много, но меньше времени реакции отдела (объективной).
Вообще журнал регистрации по сути это средство разработчика и права пользователям на запуск это явно лишнее. Странно что статья вышла только сейчас, т.к. виснет он уже давно. Мы уже пару раз в отделе попадали, что разработчик выставил мало фильтров или вообще их не поставил и база висла напрочь. Теперь правило ввели, чтобы обязательно был выставлен фильтр по данным и/или фоновым заданиям и дате.