Форум: "Базы";
Текущий архив: 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.049 c