powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сжатие базы данных
16 сообщений из 16, страница 1 из 1
Сжатие базы данных
    #33242623
lyalya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Почему при сжатии базы, не уменьшается размер файла cache.dat. Уменьшается только процент заполняемости.
Для уменьшения размера приходится создавать новую базу, и в нее закачивать все глобали из старой. Есть ли другой способ?
Если можно не посылайте меня больше ....
в техническую поддержку. :))
...
Рейтинг: 0 / 0
Сжатие базы данных
    #33243296
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, на данный момент, таких способов нет :(
Не помогает даже бэкап/рестор...
...
Рейтинг: 0 / 0
Сжатие базы данных
    #33243667
lyalya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:((
...
Рейтинг: 0 / 0
Сжатие базы данных
    #33244012
zdi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zdi
Гость
Есть.

http://www.escape.ru/resh/defrag.html
...
Рейтинг: 0 / 0
Сжатие базы данных
    #33252462
Сашок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно используя утилиту GBLOCKCOPY создать новую БД, размер которой будет равен актуальному объему данных в исходной базе данных. После копирования данных в новую базу можно подменить старую базу на новую. При этом следует помнить, что новая база по завершении копирования будет смонтирована (ни в каких Cache' Control Panel/Configuration Manager ее видно не будет), поэтому ее надо отмонтировать программно, например, используя метод Dismount в классе %SYSTEM.Database.
Подробней об утилите GBLOCKCOPY в документации.
http://127.0.0.1:1972/csp/docbook/DocBook.UI.Page.cls?KEY=AGBC_Gblockcopy
Естественно, ни о какой конкурентной работе пользователей в это время речи нет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сжатие базы данных
    #34184171
GD2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GD2
Гость
имеется такая же проблема. что-нибудь изменилось?
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34184182
GD2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GD2
Гость
я так понимаю, это происходит из-за того, что данные физически не удаляются.
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34184292
Rus000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а чего вы хотели? можете назвать пример database где сжатие происходит на в том же файле?

Имхо все правильно, данные могут располагаться в cache.dat "метастазами" и как вы собираетесь сжимать такой файл? Правильно - путем содания нового и переписыванием содержимого старого
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34184322
db2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну проблема то в том, что данные удаленные, остаются там лежать(в файле бд).
как их удалить?
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34184509
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я ничего не путаю.
Сжатие баз из панели управление больше походить на дефрагментацию - то есть сжимаются блоки одного глобала ранее размазанные по БД.

Физическое уменьшение размера - только через перенос глаблов - вручную или через GBLOCKCOPY, как и говорилось.


PS: Кстати интересный вопрос - в 5.2 появилось шифрование БД - явно "фильтр" в демоне записи блоков, когда же ISC сделают фильтр для сжатия блоков БД по тому же GZIP ?
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34185512
GD2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GD2
Гость
так а как удалить данные физически из бд? там не в фрагментации дело ИМХО
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34187360
Rus000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KILL ^GLOBAL
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34187641
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rus000KILL ^GLOBAL
И что это даст? Логически ^GLOBAL уничтожается, физически данные остаются в освобожденных блоках и легко обнаруживаются просмотром файла cache.dat
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34206904
-Serg-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergei Obrastsov Rus000KILL ^GLOBAL
И что это даст? Логически ^GLOBAL уничтожается, физически данные остаются в освобожденных блоках и легко обнаруживаются просмотром файла cache.dat

Что, даже после сжатия базы ?
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34207123
SergeyMi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть утилита от Квирикадзе В.Р.(с)
которая сжимат бд полуавтоматом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
DBCompact ;;Утилита сжатия баз данных Cache' 4.x и 5.x | вер.1.0.1 бета | Квирикадзе В.Р.(с) | 7 Января 2005
 ;
 new i,db,mgr,x,list,f,msg,replace
 goto interfaceFOOL
 quit
 ;
 ;d %swset^|"%SYS"|SWSET(10,1) ; запрет активности
 ;
 ;d %swset^|"%SYS"|SWSET(10,0) ; разрешение
 ;
 ;
 ; Основная рабочая точка входа
 ;__$$compact^%ZDBCompact(dataset,[inplace],[show])
 ;   где:
 ;      dataset = ^^путь\к\базе\данных\
 ;      inplace = 1 - сжать и заменить существующую (опасно! осторожно!)
 ;                0 - создать сжатую копию (безопасно)
 ;      show    = 1 - показывать индикатор (точки)          
 ;                0 - не показывать индикатор
 ;   возврат: меньше или = 0 - Завершено более-менее нормально (особенно когда 0 или -2)
 ;            больше 0 - Ошибка
 ;   расшифровка ошибки = $t(errs+(errnum+2)^%ZDBCompact) где errnum = код ошибки         
compact(ds,inplace,showdots)
 new i,dir,dt,mgr,dsd,globref,grs,grd,status,f,dtgtd,dsbak,dsstat,dtstat,err,dirn
 if $$cmver<4 quit 25
 set inplace=$g(inplace)
 if inplace'= 1  set inplace= 0  
 set showdots=$g(showdots)
 if showdots'=1 set showdots=0 
 set ds=$g(ds)
 if $e(ds,1,2)'="^^" quit  3 
 if ds="" quit  5 
 if $e(ds,$l(ds))'=$$fschr set ds=ds_$$fschr
 set dsd=$p(ds,"^",3)
 if dsd="" quit 2
 set dtgt=ds_"~COMPRESSED~"_$$fschr
 if $e(dtgt,1,2)'="^^" quit  3 
 if $e(dtgt,$l(dtgt))'=$$fschr set dtgt=dtgt_$$fschr
 set dtgtd=$p(dtgt,"^",3)
 if dtgtd="" quit 2
 set mgr="^^"_$zu(12)
 if '$d(^|mgr|SYS("UCI",dsd)) quit  6 
 set dir=dtgtd
 set dirn=$e(dir, 1 ,$l(dir)- 1 )
 if $zu( 140 , 4 ,dirn)= 0  do
 . for i= 1 : 1 : 20  set status=$zu( 3 ,dir) quit:status> 0   hang  1 
 . if $$Delete^%Wsdb(dir)
 . if $zu( 140 , 5 ,dir_"CACHE.DAT")
 . quit
 ;
 ;path1=source
 ;path2=destination
 ;
 ;ds = ^^[path1]\
 ;dtgt = ^^[path2]\
 ;dsd = [path1]\
 ;dtgtd = [path2]\
 ;dir = [path2]\
 ;dt = ^^[path2]\
 ;
 if $zu( 140 , 4 ,dirn)'=0 if $zu(140,9,dir)<0 quit 13
 set $zt="errdel"
 set status=$$Delete^%Wsdb(dir)
 set $zt=""
 if $zu(140,1,dir_"CACHE.DAT")'< 0  quit  1 
 if $zu( 140 , 1 ,dir_"cache.dat")'<0 quit 1
 if $zu(140,1,dir_"Cache.DAT")'< 0  quit  1 
 if $zu( 140 , 1 ,dir_"Cache.dat")'<0 quit 1
 if $zu(140,1,dir_"cache.DAT")'< 0  quit  1 
 if $zu( 140 , 1 ,dir_"CACHE.dat")'<0 quit 1
 set $zt="errcreate"
 if $$cmver=4 set status=$$Create^%Wsdb(dir,1,8192)
 if $$cmver=5 set status=$$Create^%Wsdb(dir,1,8192,5)
 set $zt=""
 if +status=0 quit 2
 set dt="^^"_dir
 set globref=""
 for  set globref=$o(^$|ds|GLOBAL(globref)) quit:globref=""  do
  . set grs="^|"""_ds_"""|"_$p(globref,"^",2)
  . set grd="^|"""_dt_"""|"_$p(globref,"^",2)
  . merge @grd=@grs
  . if showdots write "."
  . quit
 for i=1:1:20 set status=$zu(3,dir) quit:status>0  hang 1
 hang 1
 set dtstat=status
 set status=$zu(36,dir,0,0,dsd)  ;__Изменяем метку базы!
 do clearUCI(dir)
 if 'inplace quit - 2 
 if dtstat'>0 quit 14
 ;__Проверим соответствуют ли наименования существующих файлов (это скорее для Юникса)
 if $zu(140,1,dir_"CACHE.DAT")<0 quit 16
 if $zu(140,1,dsd_"CACHE.DAT")<0 quit 17
 set dsbak=dsd_"CACHE."_$p($h,",",1)_"."_$p($h,",",2)_".BAK"
 hang 1
 ;__Теперь надо аккуратно подменить базу!
 ; для этого:
 ; отмонтировать dsd (database source dir)
 ; если удачно: скопировать старую базу в ВАК
 ;              скопировать новую на место старой
 ;              попытаться смонтировать старую базу (уже новую)
 ;              если удалось:
 ;                            удалить компрессированую target базу
 ;                            все
 ;              если не удалось:
 ;                            вернуть ВАК на место
 ;                            попытаться смонтировать старую базу
 ;                            если не вышло: Все! "пришел полярный лис"!
 ;                            если вышло: Говорим что не смогли... хай ищут сжатую базу и руцями...
 ; если не удачно:  Говорим что не смогли... хай ищут сжатую базу и руцями...
 ; 
 ;
 ;
 ;__пытаемся отмонтировать старую базу
 for i=1:1:20 set status=$zu(3,dsd) quit:status>0  hang 1
 hang 1
 set dsstat=status
 if dsstat'> 0  quit  15    ;__если не удалось (крепко держится!)
 set status=$zu( 140 , 11 ,dsd_"CACHE.DAT",dsbak)
 if status'=0 quit $s($$mountold:18,1:19)
 set status=$zu(140,11,dir_"CACHE.DAT",dsd_"CACHE.DAT")
 if status'= 0  quit $s($$mountold: 20 , 1 : 21 )
 set status=$$mountold
 if 'status set err=22 do  quit err
  . set status=$zu(140,11,dsbak,dsd_"CACHE.DAT")
  . if status'= 0  set err= 23  quit
  . set status=$$mountold
  . if 'status set err=24
  . quit
 if '$$delcompressed quit - 1 
 quit  0 
 ;
clearUCI(dirname)
 if $g(dirname)="" quit
 if $d(^SYS("UCI",dirname)) if $zu( 49 ,dirname, 0 )< 0  kill ^SYS("UCI",dirname)
 quit
 ;
mountold()
 new i,status
 for i= 1 : 1 : 20  set status=$zu( 17 ,dsd, 0 , 0 ) quit:status> 0   hang  1 
 hang  1 
 quit $s(status> 0 : 1 , 1 : 0 )
 ;
delcompressed()
 new status,lst
 kill lst
 set status=+$$Delete^%Wsdb(dir)
 set status='status
 if $zu(140,4,dir_"CACHE.DAT")=0 set status=$zu(140,5,dir_"CACHE.DAT")
 if status'= 0  quit  0 
 set status=$$ListDir(dir_"*","lst")
 if '$d(lst) quit $s($zu(140,10,dir)=0:1,1:0)
 quit 1
 ;
errcreate set $zt="" quit 2
errdel set $zt="" quit 7
 ;
 ;
ListDir(spec,ref) 
 new path,fatr,n,atr,fn,char
 set char=$$fschr
 kill @ref
 set path=$tr(spec,"/\",$tr($j("",2)," ",char))
 if $$FindFirst for  if '$$FindNext quit
 quit  0 
FindFirst() 
 set n=$zsearch(path)
 if n'="" do GetFileAttr
 quit n'=""
FindNext() 
 set n=$zsearch("")
 if n'="" do GetFileAttr
 quit n'=""
GetFileAttr
 set fn=$p(n,char,$l(n,char))
 if $tr(fn,".")="" quit
 set @ref@(fn)=""
 quit
 ;
fschr() if $$isUNIX quit "/"
 quit "\"
 ;
isUNIX() quit $zv["UNIX"
 ;
cmver() if $zv[" 4." quit  4 
 if $zv[" 5." quit  5 
 quit  3 
 ;
cachedir()
 quit $p($zu( 86 ),$$fschr, 1 ,$l($zu( 86 ),$$fschr)- 1 )
 ;
 ;
 ;
 ;
 ;
errs ;;- 2 ;Successful! Compressed DB placed in ;Успешно! Сжатая БД находится в 
 ;;- 1 ;Successful, but can't remove Temporary DB;Успешно, но не удалось удалить временную БД
 ;;0;Successful, all done;Успешно, все готово
 ;;1;Temporary DB already exists;Временная БД уже существует
 ;;2;Can't create temporary DB;Не удалось создать временную БД
 ;; 3 ;Only be local DB (^^path);Только для локальных БД (^^путь)
 ;; 4 ;Can't compact SYSMGR DB;Не могу сжимать БД SYSMGR
 ;;5;DB not specified for compaction;Не указана ДБ для сжатия
 ;;6;DB not exists;БД не существует
 ;;7;Can't delete temporary DB;Не могу удалить временную БД
 ;; 8 ;;
 ;; 9 ;;
 ;; 10 ;;
 ;; 11 ;;
 ;; 12 ;;
 ;; 13 ;Can't create directory for temporary DB;Не могу создать директорию для временной БД
 ;;14;Can't dismount temporary DB after compaction;Не удалось размонтировать временную БД после сжатия
 ;; 15 ;Can't dismount source DB after compaction;Не удалось размонтировать исходную БД после сжатия
 ;;16;Can't find file appropriate to temporary DB;Не могу найти файл соответствующий временной БД (CACHE.DAT)
 ;; 17 ;Can't find file appropriate to source DB;Не могу найти файл соответствующий исходной БД (CACHE.DAT)
 ;;18;Can't create backup copy of source DB;Не удалось сделать резервную копию исходной БД
 ;; 19 ;FATAL! Can't mount source DB! Can't create backup copy;FATAL! Не могу смонтировать исходную БД! Не удалось сделать резервную копию
 ;; 20 ;Can't copy temporary DB to source DB;Не могу скопировать временную БД в исходную БД
 ;;21;FATAL! Can't mount source DB on copying temporary DB to source DB;FATAL! Не могу смонтировать исходную БД при копиров. временной БД в исходную
 ;; 22 ;Can't mount compressed DB, returned to previous state;Не удалось смонтировать сжатую БД, возвращено в исходное состояние
 ;;23;FATAL! Can't restore of source DB from backup copy!;FATAL! Не удалось восстановить исходную БД из резервной копии!
 ;; 24 ;FATAL! Can't mount source DB after restoration from backup copy!;FATAL! Не удалось смонтировать исходную БД восстановленную резервной копии!
 ;;25;FATAL! Cache version not supported by this utility!;FATAL! Версия Cache' не поддерживается данной утилитой!
 ;; 26 
 ;;
 ;
 ;
 ;
createDBlist
 kill db
 kill list
 if $$cmver= 4  goto createDBlist4
 for i= 0 : 1  set db=$zu( 49 ,i, 3 ) quit:db< 0   if $e(db, 1 )= 0  set db=$p(db,"^", 2 ) set db(i)=db
 quit
createDBlist4
 new mgr
 set mgr="^^"_$zu( 12 )
 set db=""
 for i= 0 : 1  set db=$o(^|mgr|SYS("UCI",db)) quit:db=""  do
  . if $p($zu( 49 ,db, 0 ),",", 1 )< 1  quit
  . if $p($zu( 49 ,db, 0 ),",", 1 )> 254  quit
  . set db(i)=db
 quit
 ;
interfaceFOOL
 set mgr=$zu( 12 )
 do createDBlist
 do BasesView
readadd write !,"Add to compress list: " read x write !
 if x="" goto readdel
 set x=+x
 if '$d(db(x)) write "No such number!",! goto readadd
 if $d(list(db(x))) write "Database "_db(x)_" currently is in list",! goto readadd
 set list(db(x))=""
 do BasesView
 goto readadd
readdel if '$d(list) goto foolnext
 write !,"Delete from compress list: " read x write !
 if x="" goto foolnext
 set x=+x
 if '$d(db(x)) write "No such number!",! goto readdel
 if '$d(list(db(x))) write "Database "_db(x)_" is not in list",! goto readdel
 kill list(db(x))
 do BasesView
 goto readdel
BasesView write #
 write " Database Compression Utility for Cache' 4.x & 5.x",!
 write "---------------------------------------------------",!
 write "Select Databases for compression:",!
 set i=""
 for  set i=$o(db(i)) quit:i=""  do
  . if db(i)'="",$d(list(db(i))) write $j(i,2)_". * "_db(i),!
  . else  write $j(i,2)_".   "_db(i),!
  . quit
 quit
foolnext if '$d(list) goto foolend       
 write "Replace LIVE Dataset [y\n] "
 read x write !
 set x=$e($zcvt(x,"L"))
 if x="y" set x="yes"
 if x'="yes" set replace=0
 else  set replace=1
 if replace do  if 'x goto foolnext
  . write !!!!!
  . write "WARNING! This procedure may be unsafely! Dataset replacement may",!
  . write "CORRUPT YOUR DATA! We strongly recommend don't do it on production",!
  . write "Dataset! You may continue this procedure on your own risk...",!!
  . write "Continue compression with Dataset replacement? [y\n] "
  . read x write !
  . set x=$e($zcvt(x,"L"))
  . if x="y" set x="yes"
  . set x=$s(x'="yes":0,1:1)
  . quit
 set i=""
 set f=0
 for  set i=$o(list(i)) quit:i=""  set f=$$onecompress("^^"_i,replace,$G(lang,"en")) if f quit
 if f write "FATAL errors occured! Compression STOPPED!",!,"Notify Database Administrator please!!!",!
foolend write !!!," *** Finished ***",!
 quit
 ;
onecompress(ds,live,lang)
 new stat,result,fatal
 set lang=$g(lang)
 if lang'="ru",lang'="en" set lang="en"
 write !
 write $s(lang="en":"Compacting dataset ",1:"Сжатие базы ")_ds,!
 d %swset^|"%SYS"|SWSET(10,1) ; запрет активности
 set stat=$$compact(ds,live,1)
 d %swset^|"%SYS"|SWSET(10,0) ; запрет активности
 write !
 set result=$p($t(errs+(stat+2)),";",$s(lang="ru":5,1:4))
 if result["FATAL" set fatal=1
 else  set fatal=0
 if fatal write $s(lang="en":"FATAL ERROR:",1:"ФАТАЛЬНАЯ ОШИБКА:"),!,result,!,$s(lang="en":"DATASET NOT MOUNTED AGAIN!",1:"БАЗА ДАННЫХ НЕ СМОНТИРОВАНА НА СВОЕ МЕСТО"),!,$s(lang="en":"NEED FOR DATABASE ADMINISTRATOR HELP",1:"НЕОБХОДИМО ВМЕШАТЕЛЬСТВО АДМИНИСТРАТОРА"),!
 if 'fatal,stat> 0  write $s(lang="en":"ERROR Compression dataset ", 1 :"ОШИБКА Сжатия набора данных")_ds,!,result,!
 if 'fatal,stat'> 0  write $s(lang="en":"Dataset "_ds_" compressed", 1 :"База "_ds_" сжата"),!,result,$s(stat=- 2 :$e(ds, 3 ,$l(ds))_"~compressed~", 1 :""),!
 write !
 quit fatal
 ;
...
Рейтинг: 0 / 0
Сжатие базы данных
    #34207165
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Serg- Sergei Obrastsov Rus000KILL ^GLOBAL
И что это даст? Логически ^GLOBAL уничтожается, физически данные остаются в освобожденных блоках и легко обнаруживаются просмотром файла cache.dat

Что, даже после сжатия базы ?
Какое сжатие может быть на удаленном глобале? :) А так - есть вероятность, что часть блоков попадет под перемещенные записи, но вряд ли. Скорее освободится еще больше блоков.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Сжатие базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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