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. zShamaNz 47 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 12 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 Ответить
9. zShamaNz 47 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"
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день