1С 8.3. Как обрезать логи, а то они разрослись до 15 Гб.
внимание вопрос:
Как обрезать логи а то они разрослись до 15 Гб.
делал по инструкции
http://catalog.mista.ru/public/510970/
одно но vacuum не делается хоть ты тресни.
свободного места 11 гб на диске. Может для вакуумировнаия логов в 15 гб требуется больше места?
сократил до определенной даты в конфигураторе.
но сам файл "1Cv8.lgd" так и остался 15 Гб.
потом делал следующее —
создал командный файлик со следующим содержимым:
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
sleep 5
D:\scripts\sqlite3.exe D:\ДиректорияХраненияЛоговНаСервере\1Cv8Log\1Cv8.lgd vacuum
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Сокращение журнала регистрации в 1С:Предприятие версии 8.3 Дневник Максим Боголепов
Сокращение журнала регистрации в 1С:Предприятие версии 8.3
Для многих тема данной статьи является «избитой», однако для меня при попытке вникнуть в суть изложенной ниже проблемы нашлось много нюансов, которые я постараюсь раскрыть для заинтересованных. |
Как известно, работа с журналом регистрации в 1С:Предприятие версии 8.3 существенно отличается от того, что было в предыдущих версиях. А именно, по какой-то причине разработчики убрали возможность настройки автоматического разделения журнала по периодам, из-за чего хранящий данные записи файл может разрастаться до огромных размеров (в одной известной мне организации размер журнала регистрации достиг 150 гигабайт, из-за чего исчерпалось место на системном диске и существенно снизилась производительность работы с данной базой в кластере 1С).
В 1С:Предприятие версии 8.2 в режиме конфигуратора имелась возможность разделения файла журнала регистрации по периодам (пункт меню Администрирование -> Настройка журнала регистрации ):
И при такой настройке в папке данной базы в кластере 1С мы имели список усечённых файлов регистрации, которые мы могли перемещать и хранить в другом месте:
В режиме конфигуратора 1С:Предприятия версии 8.3 мы имеем возможность только ручного сокращения журнала регистрации по определённую дату с сохранением удаляемых записей в обозначенный нами файл. Согласитесь – это не слишком удобно:
В интернете находится много решений, чтобы автоматизировать этот процесс. Я остановился на способе с применением внешних обработок (изложенный в статье по ссылке, указанной в самом конце моей заметки):
Нам предлагалось воспользоваться внешними обработками:
- РаботаСЖурналомРегистрации83.epf — позволяющей из программы 1С сокращать журнал до даты, копировать его в указанное место и восстанавливать из файла;
- СократитьЖурналРегистрацииПериод.epf — позволяющей автоматически из командной строки обрезать файл журнала регистрации до указанного периода (День / Неделя / Месяц / Год).
Но, как оказалось, те внешние обработки имели существенный недостаток. При попытке загрузить, например, обработку РаботаСЖурналомРегистрации83.epf в базу 1С:Предприятие версии 8.3 появлялась следующая ошибка:
При нажатии на кнопку Подробнее. :
Как оказалось в той внешней обработке не была обозначена функция СведенияОВнешнейОбработке . Сам я не являюсь программистом 1С, но мне удалось добиться, чтобы эта обработка установилась и выполняла своё предназначение.
Предлагаю вам скачать исправленные внешние обработки:
- РаботаСЖурналомРегистрации83.epf — скачайть (размер – 8.45 кб; формат – epf);
- СократитьЖурналРегистрацииПериод.epf — скачать (размер – 7.34 кб; формат – epf).
Для исправления ошибок первоначальных файлов внешних обработок необходимо было в режиме конфигуратора открыть их (пункт меню Файл -> Открыть ) и в модуле объекта (пункт меню Действия -> Открыть модуль объекта ):
Прописать недостающую функцию СведенияОВнешнейОбработке() :
После сохранения данной внешней обработки, её следует подключить в необходимые базы. Делается это следующим образом. В режиме 1С:Предприятие, в меню Администрирование -> Печатные формы, отчеты и обработки (в примере используется интерфейс «Такси»):
Проследите, чтобы была установлена галочка напротив Дополнительные отчеты и обработки и загрузите нашу внешнюю обработку, нажав “Дополнительные отчеты и обработки”:
В открывшемся окне нажмите “Создать” и выберите необходимую внешнюю обработку:
После её загрузки настройте пункт меню, где она будет отображаться (я выбираю пункт “Администрирование”), и определите пользователей в колонке “Быстрый доступ”, которым будет разрешено запускать данную обработку:
Я сделал возможным доступ к данной внешней обработке пользователю “администратор”:
После выполнения данных настроек нажмите “Записать и закрыть”:
Теперь, перейдите в пункт меню, который вы обозначили (в примере – “Администрирование”, подменю “Поддержка и обслуживание -> Дополнительные обработки по администрированию”):
И запустите установленную внешнюю обработку:
В окне запущенной таким образом внешней обработки РаботаСЖурналомРегистрации83.epf вы можете увидеть весь функционал по работе с журналом регистрации:
Для примера, я скопировал и сократил журнал регистрации одной из баз в файл backup.lgd:
Операция занимает некоторое время, зависящее от производительности сервера и от объёма обрабатываемой информации из файла регистрации. После завершения работы внешней обработки (внизу вы увидите соответствующее информационное сообщение):
В папке, которую вы указали в строке “Скопировать в файл” вы увидите скопированный журнал регистрации:
Проверяем, что реальный файл журнала регистрации обрезан. Идём в меню Администрирование -> Поддержка и обслуживание -> Журнал регистрации и проконтролируем, что записей старше даты, по которую мы обрезали журнал регистрации, в нём не имеется:
Выше мы рассмотрели способ ручной обработки журнала регистрации 1С:Предприятие версии 8.3. Теперь изучим алгоритм автоматического сокращения журнала регистрации из командной строки.
В предыдущей версии данной статьи мной был описан довольно туманный способ с использованием внешней обработки СократитьЖурналРегистрацииПериод.epf . Теперь приведу полностью рабочий алгоритм автоматического (по расписанию) выполнения сокращения журнала регистрации в 1с версии 8.3:
Предлагаю небольшой скрипт, написанный на PowerShell (взят отсюда):
- C:\Program Files (x86)\1cv8\8.3.7.1860\bin\1cv8.exe — путь до необходимой вам версии 1с;
- server:port — сервер 1С и порт (если кластер работает на отличном от 1541);
- basename — имя базы данных;
- user — имя пользователя с полными правами на указанную базу;
- passwd — пароль указанного пользователя;
- E:\scripts\log\1cshrink.log — путь до файла лога выполняемой операции;
- N — количество дней, по которым необходимо оставить данные в журнале (неделя – 7);
- E:\scripts\journal\ — путь до обрезаемой и сохраняемой части файла регистрации в формате .elf;
- в переменную $1clogfilename — заносится автоматически формируемое имя файла для обрезаемой и сохраняемой части файла регистрации в формате .elf (его вид – computer-1clog-basename-date.elf);
- $1clog — путь и автоматически сформированное имя файла для обрезаемой и сохраняемой части файла регистрации в формате .elf;
- следующей командой производится непосредственно обрезание и сохранение части файла регистрации.
Сохраните данный скрипт с необходимыми вам изменениями в файл с расширением .ps1 . Для того, чтобы у вас была возможность исполнять данные файлы-скрипты на сервере, проделайте от имени администратора следующее: Win+R -> powershell -> ввод . В открывшемся окне наберите команду Set-ExecutionPolicy RemoteSigned , подразумевающую, что теперь вы можете запускать локальные не подписанные скрипты PowerShell, и подтвердите своё намерение, напечатав Y .
В результате отработки данного PowerShell скрипта в папке E:\scripts\journal\ вы получите файл с обрезанными данными из файла регистрации 1С вида computer-1clog-basename-date.elf , в папке E:\scripts\log\ вы получите файл-лог 1cshrink.log с результатами работы скрипта:
Создайте теперь cmd файл и поместите туда следующие строки:
который осуществит вызов указанного скрипта (пропишите свои пути!). На основе данного cmd файла теперь можно создать задачу, которая будет выполняться в необходимое для вас время.
Как вы уже заметили, при сокращении журнала регистрации любым из описанных выше способов, высвобождающееся место не возвращается системе. Журнал регистрации хранится в файле 1Cv8.lgd и представляет собой базу данных формата sqlite. Чтобы уменьшить его размер, необходимо остановить службу агента соответствующего кластера, выполнить команду sqlite3 с ключом vacuum , а затем снова запустить службу агента кластера 1С.
Sqlite3 можно скачать с официального сайта: www.sqlite.org. Вам необходим zip архивы из секции Precompiled Binaries for Windows:
- sqlite-dll-win32-x86-3170000.zip — 32-х битная библиотека, если вы планируете запускать sqlite3 на х86 windows платформе;
- sqlite-dll-win64-x64-3170000.zip — 64-х битная библиотека, если вы планируете запускать sqlite3 на х64 windows платформе;
- sqlite-tools-win32-x86-3170000.zip — непосредственно средство sqlite3 для командной строки.
Цифры 3170000 в названиях архивов будут меняться разработчиками. Эти – означают последнюю на момент написания статьи версию – 3.17.0.
Разархивируйте библиотеку необходимой вам разрядности и положите в одну папку вместе с файлом sqlite3.exe из третьего архива. У вас должно получится что-то вроде этого:
Выполните последовательность команд (создайте cmd файл):
- 1С:Предприятие 8.3 Агент Сервера — наименование службы агента необходимого кластера 1С (не забудьте про один момент, что если ваша служба, как и у меня, написана русскими буквами, файл cmd надо сохранять в кодировке OEM 866);
- ping -n 30 -w 2000 localhost > null – команда, дающая вам 30-тисекундную задержку для того, чтобы подождать полного завершения работы 1С;
- e:\scripts\journal\sqlite\ — папка с разархивированной утилитой sqlite3.exe и библиотекой dll необходимой разрядности;
- C:\Program Files\1cv8\srvinfo\reg_1541\cdf40893-c3a4-4665-8c64-ba6f6cde503c\1Cv8Log\ — полный путь до журнала регистрации необходимой базы 1С подлежащего уменьшению.
Но основе данного cmd файла вы можете так же создать задачу и выполнять её по расписанию, или же объединить данные команды с предыдущими. Всё на ваше усмотрение.
На этом задачу по описанию процесса сокращения файла регистрации считаю завершённой.
Как уменьшить размер lgd файла 1с
Внимание!
Введение
В этом уроке мы научимся использовать обновлятор для однократного (или регулярного по расписанию) сокращения журнала регистрации в одной или группе баз.
При этом я покажу как сохранять и архивировать сокращаемую часть журнала на отдельный диск.
Пакетные скрипты
Все операции мы будем проводить на закладке обновлятора «Скрипты»:
Если вы ещё не работали с пакетными скриптами в обновляторе, советую бегло пробежаться по их возможностям: ссылка.
Оговорка
Всю следующую практическую часть мы будем делать на примере одной базы и запускать этот скрипт вручную.
Но в реальных задачах ничего не помешает нам запускать скрипт для любого количества баз (в том числе параллельно) и сохранять этот скрипт в расписание с уведомлением на почту — обо всё этом здесь.
Простейший вариант скрипта
За сокращение журнала регистрации (для любых типов баз: файловых и серверных) отвечает ключ ReduceEventLogSize в пакетном режиме конфигуратора.
В качестве параметра он принимает новую (левую) границу журнала регистрации в формате ГГГГ-ММ-ДД.
И если мы, например, хотим сократить все записи в журнале регистрации до 1 января 2018 года, то простейший вариант скрипта будет таким:
Добавляем сохранение удаляемой части в архив
Но этого мало. Мы хотим не просто сокращать журнал регистрации (который обычно занимает непростительно много места на системном диске), но ещё и сохранять сокращаемую часть на другом диске (и желательно в сжатом архиватором виде). Чтобы в случае чего к ней можно было обратиться через меню «Файл-Открыть » в конфигураторе.
Предположим, что общим местом хранения архивов журналов регистрации (для всех баз) является папка «x:\Backups\1C\EventLogs».
Этот путь уже должен существовать.
Модифицируем наш скрипт, чтобы сокращаемая часть писалась в эту папку с правильным именем:
Сжимаем сокращаемую часть архиватором
Для этого файл выгрузки сокращаемой части упакуем архиватором 7z (он идёт вместе с обновлятором), а затем удалим сам файл.
Скрипт будет таким:
Всегда сокращаем журнал на текущую дату
У нас получился универсальный скрипт, который уже можно выполнять для группы баз и ставить в планировщик.
Если бы не дата, которая жёстко прописана в скрипте, что делает бессмысленным многократный запуск этого скрипта в неизменном виде.
Давайте изменим скрипт так, чтобы при его запуске всегда подставлялась текущая дата. Это позволит нам поставить скрипт в планировщик на запуск, скажем раз в месяц, и забыть о ручном сокращении журнала регистрации раз и навсегда.
Задача получить текущую дату в скрипте в формате ГГГГ-ММ-ДД не такая простая, если рассматривать универсальное решение для всех случаев жизни.
Но для случая, когда представление даты на компьютере имеет вид ДД.ММ.ГГГГ (обычно это так по умолчанию), вытащить нужные числа и поставить их в нужном порядке можно вот так:
Обратите внимание, что мы здесь просто вытаскиваем по индексу и длине нужные части из даты, которая первоначально имеет вид ДД.ММ.ГГГГ, то есть переводим строку в формате ДД.ММ.ГГГГ в формат ГГГГ-ММ-ДД.
В итоге получим вот такой скрипт:
Удаляем неиспользуемые страницы из журнала регистрации
Вы удивитесь, но несмотря на все вышеописанные процедуры, размер файла в котором журнал физически хранится в формате sqllite не уменьшится совершенно.
То есть если он был 10 гигабайт до процедуры сокращения записей, то 10 гигабайт и останется.
Всё дело в том, что, после удаления записей из журнала регистрации, физически данные с диска не удаляются, а лишь помечаются как удаленные. Это сделано для повышения производительности.
За сжатие журнала регистрации отвечает команда Vacuum, она позволяет удалить все неиспользуемые страницы и дефрагментировать данные.
Выполнение этой команды требует остановки сервера 1с (если речь о серверной базе), чтобы получить монопольный доступ к файлу журнала регистрации.
Поэтому я рекомендую сделать эту операцию (если файл журнала регистрации уже сейчас очень сильно вырос) один раз и в дальнейшем регулярно выполнять сокращение через ключ конфигуратора ReduceEventLogSize (мы его рассмотрели выше). Это позволит удерживать размер журнала регистрации примерно на одном уровне.
Подготовительные работы
Для выполнения команды Vacuum нам понадобится утилита sqlite3, которую можно скачать с официально сайта: http://www.sqlite.org/download.html
Качаем и распаковываем вот этот пункт:
Там 3 утилиты, из которых нам нужна sqlite3.exe.
Альтернативное место для скачивания этой же утилиты — мой сайт (я подписал её своей электронной подписью).
Распакуем эту утилиту, например, в папку «x:\work» и соответственно будем обращаться к ней из скриптов как «x:\work\sqlite3.exe».
Vacuum для файловых баз
Для файловых баз выполним команду Vacuum через новый пакетный скрипт обновлятора, полагая что журнал регистрации хранится в папке с базой в «1Cv8Log\1Cv8.lgd».
Ещё раз напомню, что команду Vacuum имеет смысл выполнять уже после сокращения журнала регистрации при помощи описанного выше ключа конфигуратора ReduceEventLogSize.
Vacuum для серверных баз
С серверными базами всё несколько сложнее, в том смысле что полной автоматизации выполнения команды Vacuum для избранных баз простым пакетным скриптом не достичь.
Не достичь хотя бы потому, что невозможно автоматически определять путь к журналу регистрации серверной базы. Это нужно делать разбором файла настроек сервера 1с (1CV8Clst.lst), который тоже ещё надо правильно обнаружить. Все эти возможности выходят за рамки пакетного скрипта.
Но так как мы изначально планируем сделать Vacuum только после первого сокращения журнала регистрации, то полной автоматизации нам здесь и не надо.
Я опишу лишь примерный порядок действий:
1. Находим папку с настройками кластера 1с. Обычно это что-то типа: «c:\Program Files\1cv8\srvinfo\reg_1541».
2. В ней подпапки — на каждую базу своя. В каждой из этих подпапок есть папка 1Cv8Log с нужным нам 1Cv8.lgd, на который и нужно направить команду Vacuum.
Например, так (указанный внутри скрипт пишется и запускается в командном файле vacuum.cmd без обновлятора):
Перед его выполнением нужно остановить службу сервера 1с.
А что если нам требуется определить какой папке соответствует какая база? Для этого открываем файл 1CV8Clst.lst в корне reg_1541 и из него находим, что, например, папке 0deaa216-26dd-4ae0-9483-51a85b38c093 соответствует база test:
То есть мы можем выполнить vacuum как для всех баз на сервере, так и для избранных.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Как можно существенно сократить «Журнал регистрации» удалив из него сообщения о фоновых заданиях
1. Скачиваем SQLite 3 он состоит из трех файлов: sqldiff.exe sqlite3.exe sqlite3_analyzer.exe
2. Копируем 1cv8.lgd в папку с этими тремя файлами;
3. Запускаем sqlite3.exe
4. Выполняем следующие команды:
(select и from и where )
(не забывайте ставить ; в конце строки !)
.open 1cv8.lgd
select * from AppCodes where name like ‘%Background%’;
// Запоминаем code=2 (как #A)
select * from ComputerCodes where name like ‘%-1C-%’;
// в условие где «-1С-» подставляем имя сервера 1С (которое указываем при регистрации Базы)
// Запоминаем code=1 (как #C)
select * from EventCodes where name like ‘%Begin%’;
// Запоминаем code=3 (как #1)
select * from EventCodes where name like ‘%Commit%’;
// Запоминаем code=4 (как #2)
select * from EventCodes where name like ‘%Finish%’;
// Запоминаем code=2 (как #3)
.changes on
delete from EventLog where (eventCode=#1 OR eventCode=#2 OR eventCode=#3) AND computerCode=#C AND appCode=#A;
// Внимание! Удаление в 7GB файле длилось 15 мин на компе i7 3.2 8Gb-оперативки
// в папке появляется файл 1cv8_journal и постепенно растет …
vacuum;
// Еще примерно 7-8 мин
.exit
Итог наших манипуляций можно оценить по размеру файла 1cv8.lgd
В самом начале:
dir 1cv8.lgd