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

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

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

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

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


Затем перегрузил Сервер, не помогло ! РегламентныеЗадания которые выполняются часто, постоянно пишут события в ЖурналРегистрации. В итоге загрузка сервера 95-100%
Ответы
2. Сергей Филькин (FSerg) 63 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
4. Алексей Платонов (AnotherSide) 25.05.16 15:27 Сейчас в теме
До 1 Гб скрипт работает, свыше 1Гб получаем:

database disk image is malformed

Как можно обойти? Логи растут как на дрожжах.
5. Олег Родионов (Ovrfox) 11 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
BiTwaR; Kosstikk; smartem; +3 Ответить
Оставьте свое сообщение