Очистка диска от кэша неиспользуемых баз 1С



Ищем папки кэша, не указанные в файле ibases.v8i и в C:Program Files1cv8xsrvinfo
eg_1541 и удаляем их.

В связи с переходом на SSD с одной стороны, и с увеличением размеров КЭШа (для ERP например доходит до 6Гб) — вновь стало актуальным удаление устаревших папок кэша.

Алгоритмы:

а) ищем все папки кэша, сравниваем их имена (по-сути, ГУИДы) с файлом ibases.v8i — если в файле нет таких ГУИДов, то значит можно удалить эти папки. Если 1С запущена от имени админа — то можно просканировать папки всех пользователей Windows — полезно для терминальных серверов.

б) ищем папки в C:Program Files1cv8xsrvinfo
eg_1541 кэша, сравниваем их имена (по-сути, ГУИДы) с файлом C:Program Files1cv8xsrvinfo
eg_15411CV8Reg.lst. Не обнаруженные в файле можно или удалить (что не рекомендуется, т.к. для 8.2 там лежат журналы регистрации, а иногда возникает задача их просмотра), или переместить в zip. Есть возможность указать обработке на 1CV8Reg.lst в другой папке.

Обработка выводит список всех папок, если для папки есть запись в файле — будет написано чья это папка. Т.о. для имеющихся в файле баз позволяет понять, какая папка от какой базы, и в экстренных случаях для действующей базы вручную вычистить кэш или найти и удалить журнал регистрации (для отсутствующих в файле папок удаление доступно из обработки).
Работает и на WinXP и на Win7, и на 8.2 и на 8.3. За основу взята //infostart.ru/public/152207/

upd 21/09/2024: теперь и УФ

14 Comments

  1. Famza

    А если развернуты разные платформы 1С на одном сервере по разным портам? Можно добавить выбор порта?

    Reply
  2. ivanleb

    Не обрабатывается случай если есть файл location.cfg

    http://downloads.v8.1c.ru/content/Platform/8_3_3_658/1cv8upd.htm

    Конфигурационный файл location.cfg позволяет указать «1С:Предприятию», где выполнять поиск служебных данных.

    Во время установки версии 8.3, выполняется поиск каталогов с данными (профили пользователей, конфигурационные файлы, файлы программных лицензий и т.д.) от версии 8.2 в каталогах, доступных данному пользователю. Если каталоги с данными от версии 8.2 найдены, то в каталогах с данными версии 8.3 формируется файл location.cfg с указанием на каталоги с данными версии 8.2. Таким образом, установка новой версии не ведет к необходимости полного переноса всех данных и настроек из каталогов версии 8.2 в каталоги версии 8.3.

    Reply
  3. Дмитрий74Чел

    (1) Famza,внизу формы выводится автосформированный путь — там есть и номер порта.

    Reply
  4. Дмитрий74Чел

    (2) ivanleb, пример такого файла?

    Reply
  5. Дмитрий74Чел

    добавил установку имени файла как 1CV8Clst.lst (для 8.3) вместо 1CV8Reg.lst (для 8.2)

    Reply
  6. Zhilyakovdr

    Общие списки баз учитывает?

    Reply
  7. lvictor58

    Внутри что-то екнуло, когда после нажатия на кнопку «Удалить КЭШ» очистилась вся таблица.

    А нельзя ли чтобы в процессе очистки таблиц корректировалась построчно?

    Не у всех ведь крепкое сердце и устойчивая психика!

    Reply
  8. Дмитрий74Чел

    (6) Zhilyakovdr, пока нет

    Reply
  9. Дмитрий74Чел

    (7) lvictor58, Там ведь 2 кнопки сканирования, и какую из них нажал пользователь — не запоминает. Добавил предупреждение «таблица очищена, повторите сканирование».

    А для серверного кэша — изначально после очистки вызывается обработчик нажатия кнопки «сканировать».

    Reply
  10. Zhilyakovdr

    (8) т.е. ваша обработка умеет только анализировать случаи когда клиент работает на одном физическом сервере с сервером предприятия?

    Reply
  11. Дмитрий74Чел

    (10) Zhilyakovdr, по сети сама не ищет. Но можно вручную указать путь к серверному файлу регистрации баз (*.lst) в сети — обработка анализирует папки кэша рядом с ним.

    Reply
  12. Zhilyakovdr

    Маленький скриптик для поиска мусора (powershell):

    param(
    #[string]$ConnectionString = «F:server1ssrvinfo_8.3.6
    eg_1741»,
    [string]$ConnectionString = «F:server1ssrvinfo82
    eg_1541»,
    [string]$Filter = «#k8SjZc9DxkS{8}-S{4}-S{4}-S{4}-S{12}»
    )
    $folders = Get-ChildItem -Path $ConnectionString -name | %{if($_ -match $Filter){$_}}
    #Write-Host $folders
    
    $source=get-content «$ConnectionString1CV8Clst.lst»
    $a = $source| %{
    if ( $_ -match  «#k8SjZc9Dxk{(S{8}-S{4}-S{4}-S{4}-S{12}),»»(w+)»»,.*Ref»)
    #{$Matches[1] + «=» + $Matches[2]}
    {$Matches[1]}
    }
    #Write-Host $a
    
    
    foreach($b in $folders)
    #{$c = $b | %{  $_.split(«=») }
    #Write-Host $c[0]»=»$c[1]}
    {
    if($a -eq $b){}else{
    try{
    $FolderSize = (Get-ChildItem «$ConnectionString$b» -recurse -Force | Measure-Object -Property Length -Sum).Sum / 1Mb
    $FolderSize = [math]::round($FolderSize,2)
    Write-Host $b «=» $FolderSize
    }Catch{Write-Host $b}
    
    }
    }
    

    Показать

    Reply
  13. chetirepda

    (12) Очень полезный скриптик, спасибо

    Reply
  14. Дмитрий74Чел

    Обнаружил ошибку: для приведения кб в мб в функции РазмерПапки() возвращаемое значение делил на 1024. В т.к. функция используется в рекурсии — размер папок занижался. Необходимо убрать «/1024» в этой функции, и добавить в местах вызова функции.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *