|   |   | 
| 
 | Журнал регистрации 1С на SQLite - из-за чего возникают сбои? | ☑ | ||||||
|---|---|---|---|---|---|---|---|---|
| 0
    
        romix 26.11.15✎ 04:08 | 
 
        Периодически журнал регистрации 1С 8.3 портится (неизвестно из-за чего), пишет сообщение, дескать, malformed, и всё. Перенос или удаление файлов журнала регистрации решает проблему, но ценой обнуления журнала. 
 Читаю http://habrahabr.ru/post/181584/ - вроде все в этой СУБД по теории - однако сбои-то налицо (я очень надеюсь, что сбоит не у всех). Есть умные настройки SQLite с выбором между скоростью и надежностью: интересно, каковы они в 1С. http://www.sqlite.org/draft/pragma.html#pragma_synchronous | |||||||
| 24
    
        Гёдза 26.11.15✎ 16:56 | 
        в 8.3.7 может быть починили. МОЖЕТ БЫТЬ     | |||||||
| 25
    
        Провинциальный 1сник 26.11.15✎ 17:00 | 
        (18) Для новых ИБ он ставится по умолчанию, и вернуть старый невозможно.     | |||||||
| 26
    
        zak555 26.11.15✎ 17:05 | 
        (25) возможно     | |||||||
| 27
    
        orefkov 26.11.15✎ 17:12 | 
        Нет ничего лучше для записи логов, чем обычный текстовый файл.     | |||||||
| 28
    
        Гёдза 26.11.15✎ 17:13 | 
        (25) ... Если их перенести а в директории создать пустой файл 1Cv8.lgf     | |||||||
| 29
    
        Гёдза 26.11.15✎ 17:13 | 
        (27) нет ничего хуже для ЧТЕНИЯ логов чем ...     | |||||||
| 30
    
        Гёдза 26.11.15✎ 17:14 | 
        Хотя если бы в 1с была встроена нормальная система версионирования, то лог файл был бы не нужен     | |||||||
| 31
    
        Провинциальный 1сник 26.11.15✎ 17:18 | 
        (30) Да фиг с ним с версионированием. Почему просто не хранят лог внутри базы как таблицу?     | |||||||
| 32
    
        orefkov 26.11.15✎ 17:18 | 
        (29)
 Для чтения тоже быстрее простого файла ничего нет. А вот для анализа... Во всем мире логи кидают в текстовые файлы, а потом конвертят их по мере надобности в любой приемлемый формат, одна 1С, как всегда, идёт поперёк. Я вообще не понимаю, как они умудряются запороть файл базы данных sqlite, который вообще-то один из самых надежнейших форматов. | |||||||
| 33
    
        igork1966 26.11.15✎ 17:20 | 
        (31) потому что при фатальной ошибке с базой, не почитаешь что случилось + бэкап растет     | |||||||
| 34
    
        Провинциальный 1сник 26.11.15✎ 17:26 | 
        (33) Журнал регистрации для бэкапа не менее ценен, чем данные в базе. А при фатальной ошибке с базой смысла читать лог практически нет.     | |||||||
| 35
    
        ptiz 26.11.15✎ 17:47 | 
        Текстовый лог - хорошо и удобно.
 Одно непонятно - как 1С умудряется так медленно с ним работать? | |||||||
| 36
    
        romix 26.11.15✎ 18:16 | 
        (32) Видимо через прагму, которая запрещает журнал транзакций
 PRAGMA journal_mode = OFF см. (13) | |||||||
| 37
    
        Мыш 26.11.15✎ 18:18 | 
        (32) Для чтение быстрее блочное чтение )     | |||||||
| 38
    
        Гёдза 26.11.15✎ 18:27 | 
        (31) нельзя ибо транзакции     | |||||||
| 39
    
        romix 26.11.15✎ 18:35 | 
        (17) Сейчас попробую написать.
 (27) Частенько использую текстовый лог, но в 1С и с ним проблема (хотя можно извернуться через FileSystemObject). Требуется отбор по пользователям, кто чего менял, тут с базой, наверное, ловчее. Я бы завел по месяцам, 12 баз в год. (30) Есть же версионирование как внешняя примочка? ВерсииОбъектов, ВерсионированиеОбъектов etc. | |||||||
| 40
    
        Провинциальный 1сник 26.11.15✎ 18:39 | 
        (38) То есть, нельзя на sql-сервере произвести запись в таблицу вне текущей транзакции? Если так, то да, проблема.     | |||||||
| 41
    
        Гёдза 26.11.15✎ 18:41 | 
        (40) Хотя если отдельная очередь будет в отдельном сеансе, то можно     | |||||||
| 42
    
        Гёдза 26.11.15✎ 18:42 | 
        (39) Это должно было быть сразу, и тогда бы никому журнал регистрации не нужен был, максимум - вход - выход фиксировать     | |||||||
| 43
    
        romix 26.11.15✎ 18:43 | 
        (40) На отдельный сервер/БД же можно - там же свои транзакции.     | |||||||
| 44
    
        romix 26.11.15✎ 18:44 | 
        (42) Можно в Медиавики отгружать :-)     | |||||||
| 45
    
        Провинциальный 1сник 26.11.15✎ 18:45 | 
        (41) По идее да. Если клиент откроет два сеанса на sql-сервере, один для работы с данными, второй - для протоколирования, то транзакции мешать вести лог не будут.     | |||||||
| 46
    
        romix 26.11.15✎ 19:10 | 
        (17) Готово, ушло.
 Предложил сделать (13) или вынести это в административные настройки: тогда, я думаю, это обеспечит требуемую для высоко-нагруженных баз степень надежности - а для кого критична скорость, тот поставит PRAGMA journal_mode = OFF. И проблема SQLite, если я правильно ее вижу, будет решена. | |||||||
| 47
    
        Dmitrii гуру 26.11.15✎ 19:25 | 
        (2) >> когда же 1с сделает хранение ЖР в основной базе, а не отдельно от неё? Это же напрашивается просто!
 Не моё мнение: СУБД не совсем подходит для ведения журнала. Используя ее мы платим за то что не будем использовать. Это связано с особенностями нагрузки, которая характеризуется огромным и последовательным по времени трафиком на запись, минимальными изменениями данных и сильно разреженными выборками. (SQLite был выбран в качестве компромисса между субд (клиент-серверной) и хранениями в файлах. Кроме того для файлового варианта использование СУБД вообще чуждо. Решение перехода на SQLite связано с фундаментальными проблемами в старом журнале регистрации. В частности долгие выборки по любым запросам. | |||||||
| 48
    
        romix 26.11.15✎ 19:34 | 
        (47) А интересно если разрезать журнал по месяцам - это же будет еще лучший компромисс. Например когда диск подойдет к заполнению, можно будет переместить старые месяцы. Не будет разрастания баз и их индексов.     | |||||||
| 49
    
        Провинциальный 1сник 26.11.15✎ 19:41 | 
        (47) Для файловой sql-журнал вообще не уместен, особенно при многопользовательском доступе. Тут текстовые файлы рулят. А для клиент-серверной - почему бы и нет, если мощностей сервера хватает? Можно в конце концов сделать это опцией.     | |||||||
| 50
    
        romix 26.11.15✎ 19:45 | 
        (49) А там же физически файл, SQL сервера как такового нет.     | |||||||
| 51
    
        Провинциальный 1сник 26.11.15✎ 20:52 | 
        (50) Вот именно, и за этот файл конкурируют на запись куча клиентов, в каждом свой "встроенный сервер sqlite". Это такое же зло, как и 1cd по сети.     | |||||||
| 52
    
        Гёдза 26.11.15✎ 21:15 | 
        (51) ты не прав. сервер сам пишет в эту базу. клиенты - нет     | |||||||
| 53
    
        romix 26.11.15✎ 22:18 | 
        (51) SQLite ставит блокировку на файл. Блокировка может быть сделана корректно (с паузами) - думаю, что там это так и есть, и тогда не должно быть «плохой конкуренции» между клиентами, потоками сервера и т.д., которые одновременно пытаются что-то писать. Тут для 1С 7.7 я делал патч:
 Книга знаний: Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки (52) А у сервера много потоков исполнения может быть, там тоже конкуренция (хочется надеяться, что там она корректная и, так сказать, честная). | |||||||
| 54
    
        romix 26.11.15✎ 22:24 | 
        Текстовый лог бы тоже делали с блокировками на файл (обычно его называют *.lck, хотя может быть что-то еще). Сервер 1С может распедаливать ожидание конкурирующих потоков через другие механизмы, файлы блокировок - самый древний образец такого межпроцессного взаимодействия.     | |||||||
| 55
    
        Провинциальный 1сник 26.11.15✎ 23:52 | 
        (52) Какой сервер в случае файловой базы?     | |||||||
| 56
    
        Serg_1960 26.11.15✎ 23:58 | 
        А почему бы не архивировать журнал в регистр сведений при выгрузке и обрезке?     | |||||||
| 57
    
        Djelf 27.11.15✎ 00:29 | 
        (53) Ставит то оно ставит, но насколько оно работает создатели не проверяют т.к. это изначально не сетевая, а встраиваемая база данных.
 http://sqlite.1065341.n5.nabble.com/AGAIN-SQLite-on-network-share-td85552.html Но согласен насчет WAL, только лучше перебить на это не одну, а все прагмы journal_mode. | |||||||
| 58
    
        orefkov 27.11.15✎ 00:55 | 
        (37)
 Для чтения быстрее всего отобразить файл в память и работать с ним как с куском памяти. | |||||||
| 59
    
        Провинциальный 1сник 27.11.15✎ 00:56 | 
        (58) На 32-битных системах это ограничивает доступный размер файла 4 гб.     | |||||||
| 60
    
        romix 27.11.15✎ 01:03 | 
        (56) Да, есть различные разработки, кто-то писал на .NET выгружалку и выложил с исходниками. Но она тоже ведь встанет при ошибке «malformed». Хотя, может быть, и с меньшей вероятностью, если SQLite-базу все время обнулять подчистую (она чистая и шевелиться будет в течение дня быстрее).
 (57) С блокировкой файла трудно ошибиться, но я подозреваю, что в 1С еще какая-нибудь Прагма отключает еще и это. :-) | |||||||
| 61
    
        romix 27.11.15✎ 02:17 | 
        (57) Там еще несколько опций, насколько я понимаю, WAL - это то, что делает MS-SQL со своей базой (гарантируя при этом безошибочный откат транзакций). И там компромисс между двукратной записью и полным отсутствием защиты. :-)
 (58) А это смотря с какой целью: если вы хотите отобрать события по объекту (документу, элементу справочника) или пользователю, то ничего быстрее СУБД с индексами придумать в принципе нельзя, даже при неограниченном ресурсе ОЗУ. АВЛ-деревья не спроста же придумали в далеком-далеком СССР. | |||||||
| 62
    
        ЧеловекДуши 27.11.15✎ 06:57 | 
        (2) Лучше бы 1С разрешила писать запросы на языке хранилища БД. если это SQL, то пишется на SQL, английскими буковками, используя только транскрипцию Реквизитов, как это было реализовано у 1С++ :)     | |||||||
| 63
    
        ЧеловекДуши 27.11.15✎ 07:00 | 
        (32) Вот ты не поверишь. Но я столкнулся с системой, где вот такой подход приводит только к тому, что анализировать Лог просто нереально долго :)
 ... Идея от 1С писать в SQLlite приветствуется, но все же встает вопрос, почему не было реализовано в составе БД? Зачем было придумывать костыль? Да, может для файловой БД, это и приемлемо. А вот для других версий, SQL и .т.д. уже трагично глупо со стороны 1С :) | |||||||
| 64
    
        Strogg 27.11.15✎ 07:06 | 
        Кстати, в своё время реализовал хранение жр в отдельной сиквельной базе. Прям все летало. Потом с переходами-переездами как-то потерялось.
 А насчёт хранения в БД - версионирование этож тот же лог изменений. | |||||||
| 65
    
        Провинциальный 1сник 27.11.15✎ 07:20 | 
        (64) Версионирование средствами прикладного решения - костыль. Это должна обеспечивать платформа независимо от прикладного решения.     | |||||||
| 66
    
        romix 27.11.15✎ 11:13 | 
        (63) Логи разрастаются - это первое, что хочется куда-нибудь вынести, обрезать/сократить и так далее. Например, в ситуации когда на диске кончилось место и надо что-нибудь предпринять.     | |||||||
| 67
    
        Провинциальный 1сник 27.11.15✎ 13:06 | 
        (66) Необходимость резать логи встречается не чаще, чем необходимость резать базу.     | |||||||
| 68
    
        mikecool 27.11.15✎ 13:09 | 
        (27) а еще лучше 0 прямая печать на матричный принтер
 и не затрешь потом ) | |||||||
| 69
    
        Провинциальный 1сник 27.11.15✎ 14:02 | 
        (68) Точно. Как в банковских калькуляторах у кассиров. Все расчеты печатаются на ленте. Что там умножал и делил - всё можно раскрутить потом.     | |||||||
| 70
    
        romix 27.11.15✎ 18:29 | 
        (67)  Потеря базы - это полный аншлаг и все бегают ищут копии, а за потерю логов на практике даже не журят. Ну вот потерялись у нас целых 3 раза, и вроде пока все тихо. То есть, у них ценность другая, а размеры при этом могут быть сопоставимы с основной базой, все эти десятки гигабайт не хочется ежедневно бэкапить. Хотя, в каких-то применениях эти данные могут быть важны, но в этих случаях почему бы не хранить полную историю важных документов через Версионирование 1С.     | |||||||
| 71
    
        orefkov 28.11.15✎ 17:11 | 
        (59)
 С чего бы это? Никак это размер файла не ограничивает. Просто отображать будешь "скользящим окном". А вообще как и что с логами делается - во всём цивилизованном мире давно уже решили, одни одинэсники не знают, куда приткнуться, и пытаются велосипеды выдумывать. | |||||||
| 72
    
        romix 28.11.15✎ 17:11 | 
        (32) Кстати, да, можно писать в текст же, а отдельным приложением (например, второй базой 1С) тексты разбирать. А чтобы из основной базы 1С можно было кликать на документы и прочее - возможно веб-решение, у нас уже так сделано.  
 Я сейчас подумал, что таким же путем можно вести вообще полный архив версий документов, при этом не будет зас..ния основной базы версиями. | |||||||
| 73
    
        Serg_1960 28.11.15✎ 20:27 | 
        (72) У мня РИБ-база и мне проще - есть узел, база где не только полный архив базы на случай оперативного восстановления, но и версионирование документов. В этой базе пользователи не работают и проблема производительности меня не волнует.     | |||||||
| 74
    
        milan 28.11.15✎ 21:24 | 
        (71) поделись с миром 1с-ников достижениями в области хранения логов, только чтобы начиная хотябы от 100М записей с возможностью отбора по объекту и пользователю.     сбоит | |||||||
| 75
    
        romix 29.11.15✎ 19:58 | 
        (74) Видимо, быстрее всего писать лог в текст (при этом не выстраивается индекс и нет зависимости скорости записи от объема лога), а потом (например, ночью) его считывать второй БД, а текстовый лог обнулять или перемещать. 
 (71) Для многих внедрений SQLite может быть и оптимальный вариант, есть же всякие бухгалтерии и ларьки. Вообще эта часть разработки платформы может быть не самой трудоемкой: ну заменили DLL ту на эту, что-то изменилось к лучшему, а кому-то понравилась бы и другая опция, я думаю, что со временем и другое тоже разработают, когда дойдут руки/приоритеты. Москва же не сразу строилась. | |||||||
| 76
    
        orefkov 29.11.15✎ 20:33 | 
        (74)
 Вот, до romix'а вроде дошло уже. Что ПИСАТЬ в ЛОГ и АНАЛИЗИРОВАТЬ лог - две разные вещи. Поэтому во всём мире мире ЗАПИСЬ лога осуществляется в обычные текстовые файлы, из которых затем различными КОНВЕРТЕРАМИ информация преобразуется в вид, удобный для АНАЛИЗА. Самое простое средство из цивилизованного мира - logrotate. До его принципа в (75) romix сам додумался. Поэтому на месте одинэсников я вместо ведения журнала в sqlite выпустил бы удобный конвертер, который бы с задаваемой пользователем периодичностью заводил новый файл журнала регистрации, а старый бы конвертил хоть в sqlite, хоть в чёрта лысого. | |||||||
| 77
    
        milan 30.11.15✎ 11:45 | 
        (76) ну дак до склайт так и было, решили совместить, потому как тормзоил ЖР.     | |||||||
| 78
    
        DS 30.11.15✎ 13:12 | 
        (77) "до склайт" было не так. Журнал никуда не конвертировался, а читался из этого же файла.     | |||||||
| 79
    
        denis_jj 30.11.15✎ 14:09 | 
        Сбоит регулярно. Приходится удалять.
 До применения SQLite логи работали без сбоев, хотя и медленно. Не понятно для чего нужно было использовать SQLite когда есть сервер СУБД основной базы. Почему не использовать его для хранения отдельной базы логов. сбоит | |||||||
| 80
    
        ДенисЧ 30.11.15✎ 14:10 | 
        Логи, как и бекапы, нужно хранить отдельно от основной базы. Это же азы безопасности.
 У меня даже роутер выкидывает свои логи на удалёнку... | |||||||
| 81
    
        Провинциальный 1сник 30.11.15✎ 14:11 | 
        (80) Зачем? Это не технологические логи, в отрыве от ИБ смысла в них мало.     | |||||||
| 82
    
        denis_jj 30.11.15✎ 14:58 | 
        (81) сейчас эти логи тоже хранятся отдельно. Не понятно почему в формате SQLite а не в формате СУБД основной базы.     | |||||||
| 83
    
        denis_jj 30.11.15✎ 15:04 | 
        (80) ничто не мешает настроить физически отдельное от основной базы место хранения базы логов. Не понятно для чего использовать формат SQLite когда есть формат и сервер СУБД основной базы.     | |||||||
| 84
    
        romix 30.11.15✎ 15:56 | 
        Ответ от 1С:
 pragma journal_mode=wal приводит к частым непрогнозируемым зависаниям и деградации производительности на нагруженных базах или при достаточно большом периоде работы. В случае возникновения проблем мы рекомендуем использовать старый журнал регистрации. Для этого из каталога журнала регистрации следует перенести файлы 1Cv8.lgd, и создать пустой файл 1Cv8.lgf. | |||||||
| 85
    
        Гёдза 30.11.15✎ 15:59 | 
        (76) К сожалению ты не в 1С (((     | |||||||
| 86
    
        romix 30.11.15✎ 16:05 | 
        Я подозреваю, что все проблемы решит сочетание  journal_mode=wal и посуточного обрезания лога (365 файлов в год).
 Или то же самое - с текстом (если получится его методически корректно распарсить в стороннюю базу 1С или SQL). | |||||||
| 87
    
        Гёдза 30.11.15✎ 16:07 | 
        (86) ну текстовые резать вроде платформа сама умеет     | |||||||
| 88
    
        romix 14.12.15✎ 15:07 | 
        Отправил в 1С предложение добавить там мьютекс (скорее всего, транзакции SQLite не распараллеливаются, и это приводит к зависаниям серверных процессов) и посоветовать методически правильное средство для сбора информации из текстовых логов (может, уже есть готовое, или планируется к разработке).     | |||||||
| 89
    
        Гёдза 14.12.15✎ 15:17 | 
        (88) журнал регистрации пишет 1 процесс. там нет никакой параллельности     | |||||||
| 90
    
        Гёдза 14.12.15✎ 15:17 | 
        а именно агент сервера rgmgr     | |||||||
| 91
    
        romix 14.12.15✎ 15:20 | 
        (89) Потоки же там по числу пользователей, нет?     | |||||||
| 92
    
        orefkov 14.12.15✎ 15:22 | 
        (84)
 Похоже они просто не умеют правильно работать с sqlite. | |||||||
| 93
    
        Гёдза 14.12.15✎ 15:25 | 
        (91) 1 поток     | |||||||
| 94
    
        romix 14.12.15✎ 15:31 | 
        (92) Там видимо надо поставить режим WAL и распараллелить потоки мьютексом (наверное сейчас долбятся повторами при ошибках SQLite). 
 На нагруженных же базах лог собирать из текстов по ночам в, скажем, вторую базу 1С с логами в регистре сведений (без SQLite). Как-то так. (93) Не верю (с) Станиславский. Если два пользователя одновременно записывают документы, то как там один поток может быть?... | |||||||
| 95
    
        Гёдза 14.12.15✎ 15:32 | 
        (94) в серверной пишет (90). В файловой не знаю     | |||||||
| 96
    
        Кирпич 14.12.15✎ 15:42 | 
        (94) тебе же писали уже, что WAL глючит. Накой тебе этот WAL дался? Пускай тупо в текстовый файл пишут и все будут счастливы.     | |||||||
| 97
    
        Гёдза 14.12.15✎ 15:43 | 
        (96) а поиск?     | |||||||
| 98
    
        Кирпич 14.12.15✎ 15:45 | 
        (97) писали же уже. загружай куда хочешь и ищи сколько хочешь. в тот же SQLite.     | |||||||
| 99
    
        orefkov 14.12.15✎ 15:45 | 
        (94)
 Ну, мьютексом потоки не распаралеливаются, а наоборот - выстраиваются в очередь. Писать в sqlite базу в один момент может только один писатель. Поэтому если всё-таки вести лог в sqlite - я бы выделил один специальный поток, в который все остальные асинхронно посылали сообщения, а он их выгребал из очереди и писал в базу. Деградация производительности в wal режиме возможна, если какой-либо из читателей не закрывает запрос на выборку. В этом случае sqlite считает, что есть активные читатели и не может сделать "чекпоинт" - скинуть содержимое из wal-журнала в основную базу данных. Из-за этого разрастается список страниц, размещенных в wal-журнале. А в wal-режиме при любом обращении к странице данных сначала проверяется этот список, чтобы узнать, в каком из файлов находится актуальная версия. Имхо, проблему можно решить и без 1С, если административно раз в сутки перезаводить текстовый ЖР, и конвертить прошлый в вид, удобный для анализа. Но при этом все штатные средства просмотра журнала пойдут лесом, а многих такой путь не устраивает, все хотят "vendor way". | |||||||
| 100
    
        Гёдза 14.12.15✎ 15:46 | 
        (98) Так это нужно самому все делать     | |||||||
| 101
    
        romix 14.12.15✎ 15:46 | 
        (96) Глючит не сам WAL, а режим повторной записи без пауз, при помощи которого, очевидно, распараллеливают запись в журнал.     | |||||||
| 102
    
        romix 14.12.15✎ 15:48 | 
        (99) Мьютекс же задерживает поток, у Рихтера это образно описано как кабинка туалета в самолете. :-) Ну да, выстраивает клиентов в очередь. :-)     | |||||||
| 103
    
        orefkov 14.12.15✎ 15:48 | 
        (101)
 Да нет там никакого режима повторной записи без пауз и распаралеливания записи в журнал. Сто раз уже писал - в sqlite базу нельзя писать параллельно, только один писатель в момент. И это сам sqlite отлично поддерживает. | |||||||
| 104
    
        romix 14.12.15✎ 15:49 | 
        (103) Он возвращает код ошибки, а 1С долбится пока не кончится ошибка.     | |||||||
| 105
    
        romix 14.12.15✎ 15:50 | 
        (103) Я это и имею в виду. А чего там по коду происходит не посмотрите? А то у меня дизассемблера сейчас нету.     | |||||||
| 106
    
        romix 14.12.15✎ 15:51 | 
        Т.е. что происходит когда SQLite возвращает ошибку. У нас есть типичная ошибка, когда серверный процесс 1С зависает и при этом все время растет лог.     | |||||||
| 107
    
        romix 14.12.15✎ 15:53 | 
        Если там тяжело или нет времени то не надо, я уже в 1С написал свое предположение. Вот мой текст письма:
 «Здравствуйте, уважаемые сотрудники фирмы 1С! >В случае возникновения проблем мы рекомендуем использовать старый журнал регистрации. Проблемы просто таки обязаны возникать у всех, и они возникают, в том числе, и у нас. Странно, что этот режим (заведомо и неизбежно приводящий к проблемам) включен по умолчанию, и рекомендации его выключать даны лишь в техподдержке и в партнерских форумах. >pragma journal_mode=wal приводит к частым непрогнозируемым зависаниям Мы наблюдаем также проблему зависания серверных процессов, которая, скорее всего, связана с этой же проблемой (хотя pragma journal_mode=wal и отключен). Серверный процесс rmngr или rphost непрерывно пишет в лог, не снимается при остановке сервера и не отвечает (такие зависшие процессы надо прибивать вручную в диспетчере задач, при этом лог SQLite все время растет). Я могу предполагать (не проверял, но если надо, могу проверить), что попытки записи в базу данных логов не распараллелены и система «долбится» наподобие «дятла», ожидая блокировку, когда в базу SQLite пишет другой процесс или поток. «Частые непрогнозируемые зависания» - это, видимо, из-за того, что несколько «дятлов» (образное сравнение)-потоков подключаются к процессу «долбления», и проблема нарастает, как снежный ком. А если SQLite возвращает ошибку, но при этом все-таки выполняет саму запись в свою БД, то возникает то, что мы видим в процессе эксплуатации 1С:Предприятие. Мое предложение – проверить, действительно ли не распараллелены транзакции записи в базу SQLite (это можно сделать при помощи нарастающего sleep, а также системных средств – мьютексов и семафоров, которые есть во всех операционных системах, включая Windows и Unix) и распараллелить их, а не обходиться только повторными попытками записи без пауз при возврате от SQLite кода ошибки. Там должны быть два вызова Mutex в начале и в конце транзакции – если их нет, то проблема «частых и неконтролируемых зависаний» – неизбежна именно здесь. Переход на текстовый режим логов в нашем случае будет означать, что пропадут все наработки, которые уже сделаны для выгрузки логов в базу данных MS-SQL. Если мы будем ежедневно сбрасывать лог в базу MS-SQL и обнулять/очищать лог, то проблема pragma journal_mode=wal, (желательно, в сочетании, с мьютексом) скорее всего, не возникнет? Но зато решится проблема нестабильной работы 1С:Предприятие. Но, может быть, текстовый режим записи логов – как раз то, что нужно на нагруженных базах, и необходимо лишь средство для выгрузки содержимого текстовых логов в базу данных (предпочтительна вторая база 1С:Предприятие, содержащая логи, скажем, в регистре сведений). Поэтому у меня вопрос – есть ли (или планируются ли к разработке, если их нет) методически правильные средства для сбора логов во вторую базу 1С:Предприятие? Поскольку много логов у нас уже написаны в базы SQLite, то будет полезен сбор данных также и из этого вида логов». | |||||||
| 108
    
        Кирпич 14.12.15✎ 15:55 | 
        (107) и часто ты им такое пишешь? :)     | |||||||
| 109
    
        romix 14.12.15✎ 15:58 | 
        (108) Да вроде вежливо всё. Или там я технически не прав где-то?     | |||||||
| 110
    
        Кирпич 14.12.15✎ 16:01 | 
        (109) Про свои предположения и всякие мьютексы писать необязательно. А про глюки сообщать конечно очень полезно.     | |||||||
| 111
    
        romix 14.12.15✎ 16:04 | 
        (110) Ну там по коду легко посмотреть же, вдруг это оно. Иначе бы не было ошибки с зависанием rmngr и при этом непрерывной записью в лог.     | |||||||
| 112
    
        Кирпич 14.12.15✎ 16:07 | 
        (111) кто писал, тот пускай и разбирается. зачем давать советы, если ты точно не знаешь как оно работает. это неправильно и смешно.     | |||||||
| 113
    
        Кирпич 14.12.15✎ 16:08 | 
        мьютексы какие то. может там нету никаких мьютексов, а ты им про мьютексы...     | |||||||
| 114
    
        romix 14.12.15✎ 16:10 | 
        (112) Писали много раз, предположение, что надо выключать журнал SQLite и включать старый текстовый журнал, ни у кого в 1С не возникло. 
 (113) Дятлы зато летают, поклев дятлами (если использовать мое образное сравнение) же налицо. | |||||||
| 115
    
        romix 14.12.15✎ 16:19 | 
        (112) Правильно конечно дизассемблировать. Я так и не разобрался с дизассемблерами, а надо бы за них засесть.     | |||||||
| 116
    
        Кирпич 14.12.15✎ 16:25 | 
        (115) замени sqlite.dll своей dll и сделай свою систему логов     | |||||||
| 117
    
        Гёдза 14.12.15✎ 16:28 | 
        (116) Кстати хорошая идея. Написать транслятор для другой субд например MSSQL     | |||||||
| 118
    
        Кирпич 14.12.15✎ 16:33 | 
        (117) поздно. после письма от romix в 1с уже наорали на индуса, который систему логов писал. в следующем релизе заработает нормально     | |||||||
| 119
    
        romix 14.12.15✎ 16:34 | 
        (116) Лень, вдруг починят. Там же 3 строки заменить, и все будет пучком.
 (117) Орефков выше предлагает писать в текст и собирать внешней прогой в SQL, думаю что так на нагруженной базе будет правильнее всего. Но для этого требуется делать методически правильный механизм сбора логов: может быть в 1С чего посоветуют (я им об этом последним абзацем написал). | |||||||
| 120
    
        Гёдза 14.12.15✎ 16:36 | 
        вообще лучше использовать версионирование. Свое или 1с или сторонних разработок.
 А журнал регистраций оставить только для ошибок | |||||||
| 121
    
        Кирпич 14.12.15✎ 16:37 | 
        (119) "Там же 3 строки заменить". Напиши в 1с и про три строки тоже.     | |||||||
| 122
    
        romix 14.12.15✎ 16:41 | 
        (121) Да, там неопределенность, читать "3 строки (?)".     | |||||||
| 123
    
        romix 14.12.15✎ 16:46 | 
        (120) Тут выше предлагали РБД. Но есть страх, что и там чего нибудь чебурахнется.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |