Очистка диска от кэша неиспользуемых баз 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/2026: теперь и УФ

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 не будет опубликован. Обязательные поля помечены *