powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Растет БД CACHETEMP
25 сообщений из 43, страница 1 из 2
Растет БД CACHETEMP
    #38026189
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один (!) из клиентов жалуется на то, что у него растет БД CACHETEMP...
С чем такое может быть связано?

Поскольку наше ПО у всех одинаково и никто пока на такое не жаловался...
----------
Cache for Windows (x86-32) 2009.1.3 (Build 704_0_9104) Mon Mar 8 2010 19:31:10 EST
Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST
Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026271
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,
Cachetemp всегда растёт после старта Cache.
Вопрос - на что жалуется - 1 TB или больше чем у соседей.
Проще всего - посмотреть какие глобалы какого объёма внутри cachetemp.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026284
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuCachetemp всегда растёт после старта Cache.
Да это-то понятно, тут проблема, как я понял, почему не очищается (после перезапуска системы).
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026290
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое что приводит к росту CacheTemp - это то что глобалы не чистятся после того как становятся не нужны
при старте по умолчанию вроде 240мб

Ниже код, который позволит посчитать размеры глобалов, и размеры подузлов, что лучше может помочь найти проблемное место
/// Анализ размера глобала, с анализом размера его подузлов, на указанную вложенность
/// все необходимые параметры будут запршены при запуске
ClassMethod GlobalSize() [ PublicList = (big, DatabaseBlockSize, blksiz, cc, Bytes, Count, gls, lev) ]
{
  s $zt="err"
  do {
    s dir=$$getval("Путь к БД",$zu(12,""))
    w !
    s db=##class(SYS.Database).%OpenId(dir)    
    i '$isobject(db) s dir=""
  } while dir=""
  do {
    s glb=$$getval("Имя глобала","")
    s glb=$tr(glb,"^")
    i glb'="",'$d(@("^|""^^"_dir_"""|"_glb)) s glb=""
  } while glb=""
  s gls=$$getval("Собирать в буфер (будет очищен)","^gls")
  do {
    s lev=$$getval("Глубина расчета","2")
    i $zstrip(lev,"*N")'="" s lev=""
  } while lev=""
  k @gls
  w !
  s Directory=dir /// Папка с БД
  s Name=glb      /// Глобал 
  s rc=$zu(167,6,7,Directory,Name)
  s x=$zu(49,Directory)
  s DatabaseBlockSize=+$p(x,",",$$$blksizpiece) ;размер блока
  /// начальный блок с глобалом
  s PointerBlock=$p(rc,"^",4)
  
  o 63:"^^"_Directory 
  s blk=PointerBlock
  s (Bytes,Count)=0
  s blksiz=DatabaseBlockSize
  s big='(blksiz=$$$2k)
  d ..getsize(blk)
  w !,"Блоков = ",Count
  w !,"Занимаемое место = ",Bytes
  q
err  
  w !,$ze
  q  
getval(mess, def)
  w !,mess_": "_def_" => "
  r res
  i res="" s res=def
  q res
}

/// рекурсивный обход блоков
ClassMethod getsize(blk, haslong = 0) [ Internal, PublicList = (big, DatabaseBlockSize, blksiz, cc, Bytes, Count, gls, lev) ]
{
  q:'blk  
  v blk
  #; тип блока
  s type=$case(DatabaseBlockSize,$$$2k:$$$type2k,:$$$type) 
  w:type'=8 !,$i(cc),?10,blk,?20,type,?30,haslong
  i type=8 {
    #; Блок с данными
    s bts=$$$offsetval(big) // размер блока
    s blkcnt=0
    i haslong {
      #; составной большой блок данных, данные в нескольких блоках
      f j=1:1 {
        s x=$v(j*2,-6) 
        q:x=""  
        s gl=$v(j*2+1,-5)
        i $a(x)=$$$gdviewbiguni(big)!($a(x)=$$$gdviewbigcompact(big))!($a(x)=$$$gdviewbigbin(big)) {
          s blkcnt=$p(x,",",2) 
          s Count=Count+blkcnt // общее количество блоков
          #; размеры блоков
          s bts=bts+((blkcnt-1)*$$$datasize(blksiz)+$p(x,",",3)) 
        }
      }
    } else {
      s blkcnt=1 // в обычном блоке он один
    }
    s t=$i(Count,blkcnt),t=$i(Bytes,bts) 
    try { s gl=$v(1,-5) } catch { s gl="" }
    d ..cnt(gl,bts,blkcnt)
  } elseif type'=1 {
    #; связующие блоки
    f i=1:1 {
      s x=$v(i*2-1,-6)
      q:x=""
      try { s gl=$v(i*2-1,-5) } catch { s gl="" }
      #; связанный с текущим блок
      s datablk=$v(i*2,-5)
      s haslong=0 
      i $p($v(i*2,-6),",",1) {
        s haslong=1
      }
      d ..getsize(datablk,haslong)
      v blk
    }
  }
  q
}

/// запись счетчиков в буфер
ClassMethod cnt(gl, bts, blkcnt = 1) [ Internal, PublicList = (gls, lev) ]
{
  #; считаем в буфере 
  f i=0:1:lev {
    s ind=""
    f j=0:1:i {
      s ind=ind_$lb($qs(gl,j))
    }
    s t=$i(@gls@(ind,"size"),bts)
    s t=$i(@gls@(ind,"cnt"),blkcnt)
  }
  q
}
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026296
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.ser_shuCachetemp всегда растёт после старта Cache.
Да это-то понятно, тут проблема, как я понял, почему не очищается (после перезапуска системы).
после перезапуска, CacheTemp чистится, но не уменьшается размер БД, такого он делать не умеет
можно сам файл CACHE.DAT удалить перед запуском, и при старте он его создаст автоматически
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026315
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026332
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit Было
Но ответа так и небыло...
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026337
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorНиже код, который позволит посчитать размеры глобалов, и размеры подузлов, что лучше может помочь найти проблемное место
Наша клиентура не станет заниматься этим... Т.е. анализом чего-то у них происходящего.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026338
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026339
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USER>do ^GlobalSize
 
Путь к БД: c:\intersystems\cache\mgr\user\ =>
 
<CLASS DOES NOT EXIST>+7^GlobalSize *SYS.Database
USER>do ^GlobalSize
 
Путь к БД: c:\intersystems\cache\mgr\user\ => c:\intersystems\cache\mgr\user\
 
<CLASS DOES NOT EXIST>+7^GlobalSize *SYS.Database
USER>


Cache for Windows (x86-32) 2009.1.2 (Build 602.0_SU) Mon Oct 26 2009 15:39:14 EDT

откомпилировалось нормально (убрал слова "ClassMethod" и закоментировал PublicList-ы)...
версия Каши не та?
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026340
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuВопрос - на что жалуется - 1 TB или больше чем у соседей.
Цитирую...
авторЗа день работы CACHETEMP вырос до 14Гб
Т.е. "больше чем у соседей".
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026341
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDAiMorНиже код, который позволит посчитать размеры глобалов, и размеры подузлов, что лучше может помочь найти проблемное место
Наша клиентура не станет заниматься этим... Т.е. анализом чего-то у них происходящего.
я это знаю, и им незачем этим заниматься
там код простой, запустил собрал данные в глобал, глобал можно экспортировать и передать вам а вы уже можете его анализировать
вам все равно нужно понять кто не чистит данные раз растет БД, а без анализа данных это сделать бывает затруднительно
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026431
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать "похоронить" проблему, перейдя на приватные глобалы процесса, т.е. с ^CacheTempXXX($Job,i1,...) на ^||XXX(i1,...). Если код написан аккуратно, это не должно быть очень сложно.
В случае затруднений предварительный анализ, предложенный DAiMor'ом, помог бы определить, с каких глобалов начинать.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026449
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovМожно попробовать "похоронить" проблему, перейдя на приватные глобалы процесса, т.е. с ^CacheTempXXX($Job,i1,...) на ^||XXX(i1,...). Если код написан аккуратно, это не должно быть очень сложно.
В случае затруднений предварительный анализ, предложенный DAiMor'ом, помог бы определить, с каких глобалов начинать.

по поводу приватных глобалов, нужно быть тоже поосторожнее.
Уже не помним на какой версии (2008.1 или 2010.2.6), но были проблемы с ними, когда мы стали их использовать, у нас распух CacheTemp, и у нас не было никакой возможности понять куда ушло это место. и отследить размер приватного глобала не было возможности
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026452
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorзапустил собрал данные в глобал, глобал можно экспортировать и передать вам а вы уже можете его анализировать
Ясно...
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026473
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Статистику по размеру глобалов пользователи могут собрать, выполнив запрос в Портале:call %SYS.GlobalQuery_Size('C:\InterSystems\Cache\mgr\cachetemp','','*',1,'',0)PS: уточните точный набор и формат параметров согласно документации Вашей версии СУБД.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026514
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

Спасибо за идею!
Запрос, конечно же, нормально работает через любую внешнюю odbc-утилиту типа WinSQL.

Но с каких пор (с какой версии) Портал стал поддерживать CALL ?
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026526
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, с поднятым FastFlag (Don't return 'Used' count, it would be zero. This is for faster operaton):call %SYS.GlobalQuery_Size('C:\InterSystems\Cache\mgr\cachetemp','','*',1,'', 1 )запрос выполняется практически мгновенно.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026555
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

Мне очень стыдно, но не могли бы Вы уточнить в каком месте портала выполнить этот код?
Я знаю только одно место, где можно выполнить код, это "Исполнить SQL запрос",
но здесь выдается ошибка
Код: sql
1.
ОШИБКА #5540: SQLCODE: -370 Сообщение: SQL выражение CALL не может использоваться для Процедуры '%SYS.GLOBALQUERY_SIZE'
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026596
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раскрасил выше код пользователя DAiMor.

Если кому-то нужно помочь раскрасить свой код, воспользуйтесь кнопкой "Сообщить модератору" - я сделаю.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026613
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitРаскрасил выше код пользователя DAiMor.
Если кому-то нужно помочь раскрасить свой код, воспользуйтесь кнопкой "Сообщить модератору" - я сделаю.
насколько я понимаю ты с помощью SyntaxColoring это делаешь ?
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026614
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitуточните точный набор и формат параметров согласно документации Вашей версии СУБД.
Пока это сделать проблематично, т.к. местный специалист менят версии 2009 и 2012 то "туда", то "обратно"...
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026626
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR , Alexey Maslov ,

Это мне должно быть стыдно, что сразу не учёл этот момент.
Согласно текущей документации :The Management Portal SQL interface cannot execute a CALL statement. You can execute CALL from Dynamic SQL, Embedded SQL, or SQL Shell.
В Портале версии 2013.1.FT1 уже можно вызывать CALL.
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026650
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorнасколько я понимаю ты с помощью SyntaxColoring это делаешь ?В том числе.

Сейчас готовится публичный сервис по аналогии с http://highlight.hohli.com/ по раскраске кода для sql.ru и habrahabr.ru
Код уже написан, но в WRC должны кое-что доделать. Обещали сделать в версии 2013.2.
А до тех пор код могу раскрасить я "вручную".
...
Рейтинг: 0 / 0
Растет БД CACHETEMP
    #38026673
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком формате работает, начиная с Cache 2010.1.4 (более старые версии мне сейчас недоступны):call %SYS.GlobalQuery_Size('C:\InterSystems\Cache\mgr\cachetemp',,'*',1)Противоречий с более новыми версиями здесь, похоже, нет, главное 2-ой параметр (имя системы) именно пропустить, а не делать пустым, и задавать только первые 4 параметра.

krvsa , попробуй, может и в 2009.1 "проканает".
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Растет БД CACHETEMP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]