Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Размер базы *.gdb [D7, IB6.x]


alex_sz ©   (2006-10-20 22:37:00) 

Приветствую всех! Есть база *.gdb. В одном из полей хранится фотка в формате bmp. Таких фоток пару тысяч. Средний размер 250 кб. Размер базы около 700 мб. Делаю коверт всех фоток в базе в jpg. Получаю размер фото от 5 до 15 кб. Размер базы увеличился почти в два раза. Замена фоток происходит с помощью update. Почему так раздулась база?


Desdechado   (2006-10-22 16:13:00) [1]

2 Romkin ©
Да, подзабыл я немного. При чтении действительно старые версии читаемых записей в утиль списываются.


Romkin   (2006-10-21 22:04:00) [2]

http://www.ibase.ru/devinfo/sweep.htm


Romkin   (2006-10-21 21:59:00) [3]


> Мне что-то казалось, что ключ USE_ALL_SPACE необходим, когда
> делаешь ресторе поверх старой базы.

Из серии "слышал звон". А описание прочитать? Этот ключ использует пространство страницы под имеющиеся данные на 100%, тогда как обычно - на 80, для версий.

> Если при создании БД (или потом явно) выставлен SWEEP_INTERVAL
> > 0 (по умолчанию он >0). Или gfix прогонялся с параметром
> sweep. В остальных случаях это место остается навечно занятым
> мусором...

Сам понял? По-твоему, сборка мусора происходит в этих случаях и только в них? Сборка мусора производится при чтении записей, если ты сам не установишь насильно флаг для транзакции. А что такое sweep и как он связан со сборкой мусора - очень рекомендую прочитать статью на ibase.ru. Иначе просто мифология какая-то получается.


Desdechado   (2006-10-21 19:12:00) [4]

> после ресторе в новой БД всё равно будет 50% чистых страниц
AFAIR, меньше
Причем дело не в страницах, а в месте на страницах. Ведь блоб может быть больше одной страницы, а может и несколько блобов на одну страницу вместиться.

> Сервер вообще-то использует место, освободившееся в результате удаления записей.
Если при создании БД (или потом явно) выставлен SWEEP_INTERVAL > 0 (по умолчанию он >0). Или gfix прогонялся с параметром sweep. В остальных случаях это место остается навечно занятым мусором...

> казалось, что ключ USE_ALL_SPACE необходим, когда делаешь ресторе поверх старой базы.
Этот ключ большей частью нужен для read-only баз, особенно на компашках.


PEAKTOP   (2006-10-21 12:35:00) [5]

> (если не использовать ключ -use_all_space)
Мне что-то казалось, что ключ USE_ALL_SPACE необходим, когда делаешь ресторе поверх старой базы. Тогда происходит "дефрагментация страниц", но размер файла все равно остается тем же, просто в конце - пустые страницы


Zacho   (2006-10-21 10:51:00) [6]

PEAKTOP ©   (21.10.06 10:20) [2]
backup/restore тебе поможет


Небольшое дополнение:

Да, b/r возможно уменьшит размер БД, но прежде автору вопроса следут подумать - а надо ли ему это ?
Сейчас в БД есть неиспользуемые страницы, которые будут использованы при последующих вставках/модификациях данных. Кстати, насколько помню, после ресторе в новой БД всё равно будет 50% чистых страниц (если не использовать ключ -use_all_space)
Если же "ужать" БД до минимума, то при последующих вставках/модификациях данных сервер должен будет увеличивать размер файла БД, что существенно более затратно, чем использование свободного места в уже существующем файле.
Вобщем, выбирай - оставить как есть, или "сжать" БД и, возможно, получить тормоза в дальнейшей работе.

PEAKTOP ©   (21.10.06 10:20) [2]
Поэтому у тебя база сейчас "старые записи"(МБ)+"новые"(МБ).


Необязательно именно так. Сервер вообще-то использует место, освободившееся в результате удаления записей.


PEAKTOP   (2006-10-21 10:20:00) [7]

Потому, что IB пометил все старые записи как удаленные и добавил новые.
Поэтому у тебя база сейчас "старые записи"(МБ)+"новые"(МБ).
backup/restore тебе поможет.


Desdechado   (2006-10-20 22:59:00) [8]

потому как IB сам решает, когда ему использовать освободившееся место в файле, а когда новое загребать
видимо, фрагментация места не позволила ему использовать старое место в большиннстве случаев
о формате и механизмех управления местом читать ibase.ru


Наверх

Титульная страница Поиск, карта сайта Написать письмо