Журнал регистрации - как убрать запись в ЖР событий Сеанс Завершен

1. Vitaly1C8 12.01.16 23:19 Сейчас в теме
Подскажите как убрать из Журнала Регистрации запись событий "Сеанс Завершен" !
1С 8.3 SQL УПП
Поискал в инете, создал обработку и выполнил такой код:

ИспользованиеСобытия = Новый ИспользованиеСобытияЖурналаРегистрации;

	ИспользованиеСобытия.Использование = Ложь;

	УстановитьИспользованиеСобытияЖурналаРегистрации("_$Session$_.Finish", ИспользованиеСобытия);


Затем перегрузил Сервер, не помогло ! РегламентныеЗадания которые выполняются часто, постоянно пишут события в ЖурналРегистрации. В итоге загрузка сервера 95-100%
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FSerg 66 09.02.16 13:01 Сейчас в теме
Блин, тоже самое! Не могу понять, как отключить...

P.S. На партнерском форуме было сообщение, что в 8.3.6 не работает.
Сейчас напишу на v8@1c.ru про баг.
3. Vitaly1C8 11.02.16 12:03 Сейчас в теме
Итак, я разобрался как можно существенно сократить "Журнал регистрации" удалив из него сообщения о фоновых заданиях;
1. Скачиваем SQLite 3 он состоит из трех файлов: sqldiff.exe sqlite3.exe sqlite3_analyzer.exe
2. Копируем 1cv8.lgd в папку с этими тремя файлами;
3. Запускаем sqlite3.exe (я запускал из под FAR'а)
4. Выполняем следующие команды:
(sel ect и fr om и where - слитно* баг на форуме какой-то)
(не забывайте ставить ; в конце строки !)

.open 1cv8.lgd
sel ect * fr om AppCodes where name='%Background%';

code|name
2|"BackgroundJob"

// Запоминаем code=2 (как #A)
sel ect * fr om ComputerCodes where name='%-1C-%';
// в условие где "-1С-" подставляем имя сервера 1С (которое указываем при регистрации Базы)
code|name
1|"VIRT-1C-01"

// Запоминаем code=1 (как #C)
sel ect * fr om EventCodes where name='%Begin%';
code|name
3|"_$Transaction$_.Begin"

// Запоминаем code=3 (как #1)
sel ect * fr om EventCodes where name='%Commit%';
code|name
4|"_$Transaction$_.Commit"

// Запоминаем code=4 (как #2)
sel ect * fr om EventCodes where name='%Finish%';
code|name
2|"_$Transaction$_.Finish"

// Запоминаем code=2 (как #3)
.changes on
delete fr om EventLog wh ere (eventCode=#1 OR eventCode=#2 OR eventCode=#3) AND computerCode=#C AND appCode=#A;

changes: 41593705     total_changes: 41593705 

// Внимание! Удаление в 7GB файле длилось 15 мин на компе i7 3.2 8Gb-оперативки
// в папке появляется файл 1cv8_journal и постепенно растет ...
vacuum;
// Еще примерно 7-8 мин
.exit

Итог наших манипуляций можно оценить по размеру файла 1cv8.lgd
В самом начале:
dir 1cv8.lgd
11.02.2016  09:37      7 288 039 424 1Cv8.lgd


После манипуляций:
11.02.2016  09:37       180 030 464 1Cv8.lgd


Полезная ссылка: https://www.sqlite.org/cli.html
8. DennyPhilord 65 08.05.18 15:28 Сейчас в теме
(3)

code|name
2|"BackgroundJob"

не совсем понятно, что это за команда и как её вводить
4. AnotherSide 25.05.16 15:27 Сейчас в теме
До 1 Гб скрипт работает, свыше 1Гб получаем:

database disk image is malformed

Как можно обойти? Логи растут как на дрожжах.
5. Ovrfox 14 27.09.16 16:58 Сейчас в теме
Добавить фильтр по дате. Т.е. удалять частями
6. Vitaly1C8 10.11.16 17:16 Сейчас в теме
Завтра напишу подробный пост.
Добился ускорения процесса 1cv8.lgd размером 20 GB ужимается до 400 М за 5 мин.
7. Vitaly1C8 10.11.16 17:57 Сейчас в теме
Наконец пришло время очередной чистки, а файл увеличился аж до 20 Gb. Тут даже на мега серваке это займет час или два. Поэтому пришлось подумать, как можно ускорить процесс.
Решение оказалось лежит на поверхности. После очистки мы получаем файл, значительно меньшего размера ... Это навело на простую мысль, - создать НОВУЮ базу и импортировать в нее оставшиеся данные (равные размеру очищенного файла).

1. Проверяем версию PowerShell
Запустите PowerShell, в окне консоли введите $PSVersionTable
$PSVersionTable

CLRVersion              4.0.30319.34014                <- Нас интересует эта строчка !

Это означает что установлена версия 4.0

2. Скачиваем библиотеку SQLite c учетом нашей версии 4.0 со страницы

https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Setups for 32-bit Windows (.NET Framework 4.0)
https://system.data.sqlite.org/downloads/1.0.103.0/sqlite-netFx40-setup-x86-2010-1.0.103.0.exe

Setups for 64-bit Windows (.NET Framework 4.0)
https://system.data.sqlite.org/downloads/1.0.103.0/sqlite-netFx40-setup-x64-2010-1.0.103.0.exe

Инсталлируем.

3. Создаем скрипт файл с расширением .ps1 например CutDB.ps1 - см:вложение
Add-Type -Path "C:\Program Files\System.Data.SQLite\2010\bin\System.Data.SQLite.dll"

 $con = New-Object -TypeName System.Data.SQLite.SQLiteConnection
 $con.ConnectionString = "Data Source=C:\Vital\1cv9.lgd"
 $con.Open()

 $sql = $con.CreateCommand()
 $sql.CommandText = "ATTACH DATABASE 'C:\Vital\1cv8.lgd' as v8"
 $sql.ExecuteNonQuery()

 $sql = $con.CreateCommand()
 "AppCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS AppCodes AS SEL ECT * FR OM v8.AppCodes"
 $sql.ExecuteNonQuery()
 "ComputerCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS ComputerCodes AS SEL ECT * FR OM v8.ComputerCodes"
 $sql.ExecuteNonQuery()
 "ComputerToUserCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS ComputerToUserCodes AS SEL ECT * FR OM v8.ComputerToUserCodes"
 $sql.ExecuteNonQuery()
 "EventCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS EventCodes AS SEL ECT * FR OM v8.EventCodes"
 $sql.ExecuteNonQuery()
 "EventLogMetadata"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS EventLogMetadata AS SEL ECT * FR OM v8.EventLogMetadata"
 $sql.ExecuteNonQuery()
 "MetadataCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS MetadataCodes AS SEL ECT * FR OM v8.MetadataCodes"
 $sql.ExecuteNonQuery()
 "PrimaryPortCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS PrimaryPortCodes AS SEL ECT * FR OM v8.PrimaryPortCodes"
 $sql.ExecuteNonQuery()
 "SecondaryPortCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SecondaryPortCodes AS SEL ECT * FR OM v8.SecondaryPortCodes"
 $sql.ExecuteNonQuery()
 "SessionDataCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SessionDataCodes AS SEL ECT * FR OM v8.SessionDataCodes"
 $sql.ExecuteNonQuery()
 "SessionDataSplits"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SessionDataSplits AS SEL ECT * FR OM v8.SessionDataSplits"
 $sql.ExecuteNonQuery()
 "SessionHosts"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SessionHosts AS SEL ECT * FR OM v8.SessionHosts"
 $sql.ExecuteNonQuery()
 "SessionParamCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SessionParamCodes AS SEL ECT * FR OM v8.SessionParamCodes"
 $sql.ExecuteNonQuery()
 "SessionUsers"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS SessionUsers AS SEL ECT * FR OM v8.SessionUsers"
 $sql.ExecuteNonQuery()
 "UserCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS UserCodes AS SEL ECT * FR OM v8.UserCodes"
 $sql.ExecuteNonQuery()
 "WorkServerCodes"
 $sql.CommandText = "CRE ATE   TABLE IF NOT EXISTS WorkServerCodes AS SEL ECT * FR OM v8.WorkServerCodes"
 $sql.ExecuteNonQuery()
 "-------------------------------------"
 $sql = $con.CreateCommand()
 $sql.CommandText = "SEL ECT * FR OM AppCodes WHERE name=@BackgroundJob"
 [void]$sql.Parameters.AddWithValue("@BackgroundJob", '"BackgroundJob"');
 $adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql
 $data = New-Object System.Data.DataSet
 [void]$adapter.Fill($data)

 $appCode = $data.tables.rows[0].code
 # DEBUG: Show recordset
 # $data.tables.rows


 $sql = $con.CreateCommand()
 $sql.CommandText = "SEL ECT * FR OM ComputerCodes WHERE (name=@Comp1 OR name=@Comp2)"
 [void]$sql.Parameters.AddWithValue("@Comp1", '"SMF-1C-01"');
 [void]$sql.Parameters.AddWithValue("@Comp2", '"SMF-1C-02"');
 $adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql
 $data = New-Object System.Data.DataSet
 [void]$adapter.Fill($data)

 # DEBUG: Show recordset
 # $data.tables.rows
 $computerCode1 = $data.tables.rows[0].code
 $computerCode2 = $data.tables.rows[1].code

 $sql = $con.CreateCommand()
 $sql.CommandText = "SEL ECT * FR OM EventCodes where name Like @Begin OR name Like @Commit OR name Like @Finish"
 [void]$sql.Parameters.AddWithValue("@Begin",  '%Begin%');
 [void]$sql.Parameters.AddWithValue("@Commit", '%Commit%');
 [void]$sql.Parameters.AddWithValue("@Finish", '%Finish%');
 $adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql
 $data = New-Object System.Data.DataSet
 [void]$adapter.Fill($data)

 # DEBUG: Show recordset
 # $data.tables.rows
 $eventCode1 = $data.tables.rows[0].code
 $eventCode2 = $data.tables.rows[1].code
 $eventCode3 = $data.tables.rows[2].code

 "Selecting EventLog (~5 min)"
 $sql = $con.CreateCommand()
 $sql.CommandText = "CRE ATE   TABLE EventLog AS SELECT * FR OM v8.EventLog WH ERE NOT ((eventCode=@eventCode1 OR eventCode=@eventCode2 OR eventCode=@eventCode3) AND (computerCode=@computerCode1 OR computerCode=@computerCode2) AND appCode=@appCode)"
 [void]$sql.Parameters.AddWithValue("@eventCode1", $eventCode1);
 [void]$sql.Parameters.AddWithValue("@eventCode2", $eventCode2);
 [void]$sql.Parameters.AddWithValue("@eventCode3", $eventCode3);
 [void]$sql.Parameters.AddWithValue("@computerCode1", $computerCode1);
 [void]$sql.Parameters.AddWithValue("@computerCode2", $computerCode2);
 [void]$sql.Parameters.AddWithValue("@appCode", $appCode);
 $sql.ExecuteNonQuery()

 Write-Host "Press any key to continue ..."
 $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

 $sql.Dispose()
 $con.Close()
 $con.Dispose()
Показать


В этом скрипте Вам нужно заменить пути на свои:
Add-Type -Path "C:\Program Files\System.Data.SQLite\2010\bin\System.Data.SQLite.dll"
По этому пути должна лежать System.Data.SQLite.dll
C:\Vital\1cv9.lgd
C:\Vital\1cv8.lgd

Замените имя сервера на свое:
"SMF-1C-01"
SMF-1C-02"

Если у Вас один сервер, дважды проставьте "SRV-1C-01" и "SRV-1C-01"
закомментируйте строчку с помощью #
# $computerCode2 = $data.tables.rows[1].code

Выполните скрипт, правая кнопка на файле CutDB.ps1 Выполнить с помощью PowerShell
Alex_IT; BiTwaR; Kosstikk; smartem; +4 Ответить
9. DennyPhilord 65 08.05.18 20:20 Сейчас в теме
(7)
$appCode = $data.tables.rows[0].code
почему может пустая таблица возвращаться?
10. Vitaly1C8 14.05.18 16:54 Сейчас в теме
(9) Очевидно потому что запрос "SEL ECT * FR OM AppCodes WHERE name=@BackgroundJob" не возвращает строк ! Нужно посмотреть таблицу AppCodes на наличие "BackgroundJob"
11. V_K 16.11.20 00:03 Сейчас в теме
Настроил у себя этот скрипт. после выполнения создается новый файл 1cv9.lgd я так понимаю это обрезаный журнал? А что с ним дальше то делать? Я пробовал заменить файл оригинал журнала регистрации, но потом при запуске 1с выдает ошибку
12. V_K 16.11.20 00:03 Сейчас в теме
Ошибка формата файла журнала регистрации
по причине:
sqlite3_exec failed: attempt to write a readonly database
db: C:\Program Files (x86)\1cv8\srvinfo\reg_1541\******************\1Cv8Log\1Cv8.lgd
sql: CRE ATE INDEX IF NOT EXISTS EventLog_idx_date ON EventLog (date);
13. V_K 23.11.20 12:22 Сейчас в теме
Оказалось что надо еще немного дописать скрипт. Дописать создание индексов.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот