|   |   | 
| 
 | ЖР SQLite - внезапно 1Cv8.lgd-journal | ☑ | ||
|---|---|---|---|---|
| 0
    
        AlexSTAL 06.11.20✎ 09:29 | 
        Может кто сталкивался или подскажет, с чего начать
 Кластер из 3-х серверов (2 центральных и 1 лицензирования) Несколько инсталляций в разных филиалах, версия 8.3.17.1549, windows server, промышленная эксплуатация В одном из филиалов пользователи начали жаловаться на внезапные полные зависания системы на продолжительное время (3-25 минут). Вчера сам столкнулся с данной ситуацией, полез в каталог с ЖР и обнаружил, что по мимо файла 1Cv8.lgd присутствует файл журнала транзакций 1Cv8.lgd-journal и он постоянно растёт Т.е. основной файл примерно 1,5 Гб, а файл журнала транзакций за 15 минут вырос до 0,4 Гб и исчез. В это время работа в 1С была не возможна. Записей в ЖР в этом промежутке нет. Что может 1С делать с журналом регистрации? | |||
| 1
    
        AlexSTAL 06.11.20✎ 09:32 | 
        Выглядит это вот так:
 https://ibb.co/wdQvRDx | |||
| 2
    
        dmpl 06.11.20✎ 09:38 | 
        (0) Отбор не попал в индекс, пошел тупой перебор.     | |||
| 3
    
        AlexSTAL 06.11.20✎ 09:52 | 
        (2) Речь про отображение ЖР? Ни у кого нет доступа к нему, никто не мог запрашивать из него информацию     | |||
| 4
    
        vis_tmp 06.11.20✎ 09:56 | 
        (3)Сделать отбор и проверить     | |||
| 5
    
        AlexSTAL 06.11.20✎ 09:59 | 
        (4) я не понимаю, про что речь. Отбор чего? В конфигураторе в ЖР все отборы по всем событиям работают. У пользователей нет доступа к ЖР, посему никто ничего в нём смотреть не может     | |||
| 6
    
        mistеr 06.11.20✎ 09:59 | 
        (0) Журнал SQLite растет, когда данные не могут быть надежно записаны в основной файл (например, его кто-то блокирует).
 Смотрите логи сервера 1С, возможно там есть ответ. | |||
| 7
    
        mistеr 06.11.20✎ 10:00 | 
        Может антивирус шалит.     | |||
| 8
    
        AlexSTAL 06.11.20✎ 10:01 | 
        (6) какая-либо незавершённая транзакция? Которая потом откатывается?
 ЖР смотрел, ничего вообще подозрительного найти не смог | |||
| 9
    
        AlexSTAL 06.11.20✎ 10:01 | 
        (7) Хм, спасибо, посмотрю     | |||
| 10
    
        fisher 06.11.20✎ 10:06 | 
        На всех больших базах перевожу ЖР в текстовый формат с разделением по периодам. Надежно и удобно. Правда и журналирование переделываю, чтобы в ЖР срало как можно меньше.     | |||
| 11
    
        Жан Пердежон 06.11.20✎ 10:07 | 
        (0) ставишь текстовый по дням и забываешь о проблеме     | |||
| 12
    
        mistеr 06.11.20✎ 10:11 | 
        (8) ЖР пишется вне транзакций.     | |||
| 13
    
        mistеr 06.11.20✎ 10:12 | 
        (8) А, если ты про транзакцию SQLite, то да, возможно.     | |||
| 14
    
        D_E_S_131 06.11.20✎ 10:12 | 
        На больших базах с интенсивным вводом данных SQLite быстро загнется. Держим там не более 2-х дней последних, остальное отрезаем и "складируем" отдельно (в базе 1С на MSSQL).     | |||
| 15
    
        Ёпрст гуру 06.11.20✎ 10:13 | 
        (0) понять и простить, жр на скульлайте не удался на селезнёвке..пользуй текстовый жр     | |||
| 16
    
        dmpl 06.11.20✎ 10:16 | 
        (3) А если УстановитьПривилегированныйРежим()? И потом программно запустить отбор.     | |||
| 17
    
        AlexSTAL 06.11.20✎ 10:18 | 
        (all) Перевести в текстовый - очень быстрое решение, но при наличии наработок (агрегация ЖР, выгрузка в ИБ и т.д.) не простое решение.
 Кроме того, отбор за большой период (скажем год) в SQLite будет работать в разы быстрее. Сейчас самый большой файл ЖР 45 Гб, и ничего, работает... Значит проблема решаемая, главное понять, при каких обстоятельствах она проявилась | |||
| 18
    
        AlexSTAL 06.11.20✎ 10:21 | 
        (16) Я не понимаю, что за отбор и при чём тут отбор     | |||
| 19
    
        fisher 06.11.20✎ 10:26 | 
        (17) Хозяин - барин. Но во всех "взрослых" системах, если необходим быстрый анализ - сбоку прикручивается система агрегации логов с нужными свистоперделками. А первичные логи всегда ведутся локально в тексте, как в самом простом и надежном варианте, для которого в том числе легко настраивается ротация. Только 1С изобретает велосипед не подумав, а потом устраивает метания. Лично меня пока необходимость агрегации ни разу не прижимала. И "расследования" и анализ статистики проводятся не настолько часто и занимают приемлемое время, чтобы необходимость сверх-быстрого анализа стала насущной.
 А проблемы с SQLite на больших базах возникают редко, но закономерно. | |||
| 20
    
        fisher 06.11.20✎ 10:30 | 
        Причем когда они возникают, это как правило всегда выглядит как "стоп-система".     | |||
| 21
    
        fisher 06.11.20✎ 10:32 | 
        Идеальный ЖР был в 7.7
 А в 8-ке на старте ТЖ не было и они попытались скрестить ежа и ужа, при этом не предоставив возможностей гибкой настройки. В результате ЖР для обеих задач (анализ работы системы и анализ действий пользователей) в своем дефолтном виде стал подходить очень плохо. И вместо решения проблемы в корне чья-то "светлая голова" решила прикрутить скулайт. | |||
| 22
    
        dmpl 06.11.20✎ 10:33 | 
        (18) Только поиск в ЖР приводит к такому поведению. Причем поиск, который не попал в индекс, и начинается перебор. Перебор идет со скоростью порядка 10-30 Мб/с, на это время блокируются любые операции, требующие работы с ЖР (например, которые добавляют записи в него).     | |||
| 23
    
        dmpl 06.11.20✎ 10:35 | 
        +(22) Прекратить это можно, например, принудительно завершив процесс rmngr.     | |||
| 24
    
        fisher 06.11.20✎ 10:36 | 
        (23) Подтверждаю. Эффективный способ прекратить любые безобразия в 1С.     | |||
| 25
    
        mistеr 06.11.20✎ 10:38 | 
        (22) Если бы блокировалась запись, журнал бы не рос. :)     | |||
| 26
    
        dmpl 06.11.20✎ 10:43 | 
        (25) В журнале вполне может быть аналог tempdb, куда складываются временные данные по выполняемому запросу.     | |||
| 27
    
        fisher 06.11.20✎ 10:58 | 
        Из доки по скулайту -journal - это rollback journal. С помощью которого в скулайте транзакции реализуются. Просто какого-то хрена система зафигачила в скулайт большую транзакцию. Что это такое может быть - самому интересно. Но тут, ИМХО, только ТЖ может помочь прояснить картину.     | |||
| 28
    
        fisher 06.11.20✎ 11:02 | 
        Еще вариант - кластер какого-то хрена переводил лог в режим эксклюзивной блокировки (PRAGMA lock_mode = EXCLUSIVE;)
 Это вызывает аналогичное поведение. | |||
| 29
    
        Вафель 06.11.20✎ 11:13 | 
        вернуться на старый журнал     | |||
| 30
    
        Вафель 06.11.20✎ 11:15 | 
        говорят на него теперь можно и индексы навешать     | |||
| 31
    
        AlexSTAL 06.11.20✎ 11:26 | 
        Хм. Нашёл в ЖР примерно в то проблемное время событие Транзакция начало, статус транзакции - не завершена. Источник - фоновое задание
 В других базах нет таких событий | |||
| 32
    
        fisher 06.11.20✎ 11:36 | 
        (31) Сам по себе, откат транзакции 1С не должен приводить к откату транзакции скулайта. Это ж лог и записи о неудачных транзакциях туда тоже пишутся. Возникает вопрос, каким образом в лог происходит запись статуса об откате транзакции в сделанные ранее записи. Подозреваю, что именно после отката транзакции в 1С кластер находит все записи сделанные этой транзакцией в лог и меняет в них значение поля статуса транзакции. И именно во время этой операции произошел глобальный лок.     | |||
| 33
    
        fisher 06.11.20✎ 11:43 | 
        Скорее всего, изменение поля статуса транзакций в куче записей лога делается в транзакции. И так как это лочит все последние записи, то вероятно скулайт в это время не позволяет добавлять новые записи.
 В сиквеле, ИМХО, будет такое-же поведение. Если эксклюзивно залочить последние строки кластерного индекса - новую строку добавить не даст. | |||
| 34
    
        dmpl 06.11.20✎ 11:45 | 
        (33) Но тут же индексы должны рулить, а потому эта операция должна быть относительно быстрой.     | |||
| 35
    
        fisher 06.11.20✎ 11:46 | 
        Получается, что откат любых больших транзакций в 1С с журналом на скулайте приводит к stop the world
 Интересно, что в аналогичной ситуации происходит на текстовых логах. Может, тоже самое, просто быстрее обрабатывается. | |||
| 36
    
        fisher 06.11.20✎ 11:48 | 
        (34) Если у тебя транзакция на 10 мин растянулась - ее откат физически не способен произойти быстро.     | |||
| 37
    
        AlexSTAL 06.11.20✎ 11:49 | 
        Хм2... больше таких записей не нашёл, когда у сотрудников был stop the world. Может разные проблемы конечно...
 Самое простое, насколько я понимаю, написать мониторинг наличия/отсутствия файла лога в каталоге | |||
| 38
    
        fisher 06.11.20✎ 11:49 | 
        Вернее, транзакция в скулайте оказывается очень большая. В обычной ситуации их вообще как бы и нет - тупо строчка добавляется.     | |||
| 39
    
        fisher 06.11.20✎ 11:50 | 
        (37) Вероятно, это просто редкий случай когда откатывалась очень большая транзакция. Скорее всего на очень большое количество мелких объектов.     | |||
| 40
    
        fisher 06.11.20✎ 11:51 | 
        Хотя не обязательно. Там же по дефолту и движения регистров логируется.     | |||
| 41
    
        fisher 06.11.20✎ 12:06 | 
        (37) Можно косвенно прикинуть справедливость гепотезы - если ты посчитаешь количество записей в лог, которое сделала транзакция которая откатилось. Если это объективно очень большое число, то субъективно можно предположить, что в этом могла быть причина :) А если не очень большое - тогда неясно. Гипотеза может быть верной, просто мог вмешаться какой-то дополнительный фактор. Например просто начались проблемы с диском в том месте, где лежит лог и производительность записи в него резко упала. На добавлениях незаметно, а на массивных операциях уже проявляется.     | |||
| 42
    
        fisher 06.11.20✎ 12:10 | 
        Предварительно количество записей должно быть очень большим. Раз размер файла транзакции составил четверть размера от основного файла. Если лог ведется от начала работы базы - то это как-то ненормально много. Может, у тебя там перепроведение в транзакции? :)     | |||
| 43
    
        Вафель 06.11.20✎ 12:11 | 
        зачем пытаться разобратся с этим сиквел лайт, когда сама 1с рекомендует на старый журнал переходить     | |||
| 44
    
        Вафель 06.11.20✎ 12:12 | 
        (42) транзакции ЖР никакого отношения не  имеют к транзакциям внутри самой 1с     | |||
| 45
    
        dmpl 06.11.20✎ 12:18 | 
        (42) Структура ЖР в SQLite практически такая же, как в текстовом виде. Т.е. 1С просто вместо текстового файла отправляет записи в базу SQLite. Поэтому все предварительные записи есть только в памяти 1С.     | |||
| 46
    
        mistеr 06.11.20✎ 12:27 | 
        (33) Откуда такие фантазии?     | |||
| 47
    
        fisher 06.11.20✎ 12:31 | 
        (44) Прямого - не имеют. Но при откате транзакции 1С в ЖР необходимо проставить признак неудачной транзакции для всех записей, по которым она сделала записи в ЖР
 (46) Все фантазии - они от воображения. Воображение нужно развивать! | |||
| 48
    
        fisher 06.11.20✎ 12:32 | 
        Тьфу! "Но при откате транзакции 1С в ЖР необходимо проставить признак неудачной транзакции для всех записей, которые она сделала в ЖР"     | |||
| 49
    
        Cyberhawk 06.11.20✎ 12:41 | 
        (43) В том-то и дело, что нет такой рекомендации. Только намеки :)     | |||
| 50
    
        fisher 06.11.20✎ 12:46 | 
        (43) Причем это после того, как они сначала вообще отключили в интерфейсе возможность выбрать текстовый формат и для всех новых баз форсили скулайтный по дефолту.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |