Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Неоправданное распухание файла .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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1097603817
zolll
2004-10-12 21:56
2004.10.31
Данные


4-1096021630
Antonmm2
2004-09-24 14:27
2004.10.31
Устройства


3-1096884693
WondeRu
2004-10-04 14:11
2004.10.31
FireBird: port 3050


1-1098176816
Eyfel
2004-10-19 13:06
2004.10.31
Delphi 8.net + NetFramework Update


1-1097654233
П7
2004-10-13 11:57
2004.10.31
Динамические кнопки и их события





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский