Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Неоправданное распухание файла .DB   Найти похожие ветки 

 
AZ ©   (2004-10-01 07:04) [0]

D6, WinXP, Paradox, BDE.
Девайс сбрасывает приодически (5мин) данные в таблицу Paradox tbHistory.
По закону подлости ночью таблица спонтанно распухает, хотя в нее писАть может только нижеприведенный кусок кода. Количество записей в ней правильное, но файл History.DB занимает втрое больше места, чем должен, даже учитывая избыточность.

Таблица содержит:
[0] – Timestamp
[1] – Integer;
далее 8 пар данных
[..] – Single
[..] – Boolean.

 with tbHistory do begin
  Edit;
   if (RecordCount>80) then
    Last;        
   for i:=0 to  79 do begin
    Append;
    Fields.Fields[0].AsDateTime:=CurrDateTime;
    Fields.Fields[1].AsInteger:=i;
     for j:=0 to 7 do begin
      Fields.Fields[j*2+2].AsFloat:=CurrSample[i,j].Value;
      Fields.Fields[j*2+3].AsBoolean:=CurrSample[i,j].InUse;
     end;
   end;
  Post;
 end;

Куда копать?


 
ЮЮ ©   (2004-10-01 07:32) [1]

А где этот кусок стоит? В таймере что-ли?
И что он по твоему должен делать? По коду - дописывать 80 строк, что, очевидно, и делает, а как часто - зависит от частоты использования кода.

Посмотри поле времени, как часто эти 80 записей добавляются

Edit; - лишнее, т.к. редактирования записи все равно никакого нет


 
AZ ©   (2004-10-01 09:52) [2]

Этот кусок стоит в подпрограмме, вызываемой по таймеру.
Каждые 5мин. девайс опрашивается, данные заносятся.
Поле Timestamp соответствует интервалу.
Без Edit сообщение, что таблица не в Edit mode.


 
msguns   (2004-10-01 10:43) [3]

>AZ ©   (01.10.04 09:52) [2]
>Без Edit сообщение, что таблица не в Edit mode.

Только в одном случае - когда таблица пустая (Append для пустой таблицы не переводит ее в едит-режим,... хотя не уверен на все 100 ;))

Значится в час добавлянтся ~1000 записей. За нерабочее время ~15000. Не так уж и много за 1 день (ночь) ;)

Если перед записью в таблицу делается ее чистка методом Delete, то это не удаляет записи физически, т.е. записей нет (активных), а размер файла все равно здоровый. Чтобы этого не было, надо таблице говорить Empty, а еще надежнее пересоздавать заново (например, чтоб обнулить автоинкремент)


 
AZ ©   (2004-10-01 11:14) [4]

>msguns   (01.10.04 10:43) [3]
Спасибо.
Учту обязательно.


 
AZ ©   (2004-10-01 11:41) [5]

Кстати, SQL-запрос DLETE ... FROM TABLE тоже не удаляет записи?
Что в с этими неудаленными записями делать?
Как их все же физически уничтожить?


 
msguns   (2004-10-01 12:09) [6]

Большинство СУБД (в т.ч. парадокс/BDE) с целью ускорения работы с таблицами, при удалении записей не перезаписывают весь файл физически, а новые добавляют в конец, помечая ставшие неактивными как "удаленные". При последующих добавлениях новые записи могут занять места ранее удаленных, что позволяет избежать перезаписи всего файла или его части (для ДОС-й файловой системы с ее цепочками кластеров, приводящей при частом обновлении к свехфрагментации диска, это особенно актуально). Кроме того, такая система "резервирования" памяти позволяет со временем как бы оптимизировать среднее время доступа, т.к. таблица почти не изменяется физически (и количественно). Яркий пример - справочники. В серверных системах "раскрой" памяти несколько другой, но принцип - тот же.
Поэтому для тех таблиц, которые нужны как накопительные за какой-то промежуток времени, лучше после использования информации (или сохранения ее в архиве) делать "перерождение": чистить физически (для парадокс - Empty) либо вообще удалять и создавать по новой)


 
AZ ©   (2004-10-01 12:21) [7]

>msguns   (01.10.04 12:09) [6]
Исчерпывающе.
Спасибо!


 
panov ©   (2004-10-01 12:31) [8]

>AZ ©   (01.10.04 12:21) [7]
См. DBIPackTable


 
AZ ©   (2004-10-01 12:42) [9]

>panov ©   (01.10.04 12:31) [8]
К сожалению, поиск в Help DBIPackTable и просто DBI ничего не дал.
Можно ли чуть подробнее?


 
kuusiniemi   (2004-10-01 16:19) [10]

bde32.hlp смотрите. когда будете использовать, то uses bde не забудьте.


 
Anatoly Podgoretsky ©   (2004-10-01 19:51) [11]

Не надо паковать Парадокс, это приведет только к замедлению, кдаленные записи повторно используются.


 
AZ ©   (2004-10-02 10:02) [12]

Спасибо.


 
AZ ©   (2004-10-05 12:57) [13]

Насколько я понимаю, операция Append добавляет новую запись каждые 5мин. - таблица растет (см. код [1]).
Далее я начинаю периодически (опять таки через 5 мин.) перекачивать устаревшие данные с помощью SQL-запроса данные в другую таблицу.

По идее, согласно
>msguns   (01.10.04 12:09) [6]

и
>Anatoly Podgoretsky ©   (01.10.04 19:51) [11]

должно наступить динамическое равновесие.
Пока что я вижу только распухание таблицы, уже за 12 часов > 2,8 мб.
???



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
1-1098165277
Mishenka
2004-10-19 09:54
2004.10.31
Обработка события OnClick???


3-1096624461
stud
2004-10-01 13:54
2004.10.31
использование параметра в хранимой процедуре


6-1087975627
abcdef
2004-06-23 11:27
2004.10.31
Скачивание файла через HTTP FTP


1-1098170815
Kat
2004-10-19 11:26
2004.10.31
ИЗВИНЯЮСЬ Есть число типа DOUBLE.


1-1097842008
race1
2004-10-15 16:06
2004.10.31
плееры и потоки