![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размер базы *.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