![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
База не меняет размер...
3APA3A © (2004-04-14 23:20:00)FireBird 1.5.ххх
В базе одна таблица, в ней порядка 2000000 записей, занимает около 125 Мб...
после выполнения запроса
IBQuery1.SQL.Text := 'delete from table1';
IBQuery1.ExecSQL;
1) запрос выполнялся около 5 минут
2) размер самой базы увеличился до 141 Мб
3) записей в таблице не осталось, то есть запрос выполнился верно...
Помогите разобраться...
bds (2004-04-16 11:14:00) [1]Внутри базы есть Pointer-page - страницы указателей на данные и
Data-page - страницы данных. Данные расположены на Data-page.
У каждого блока данные на Data-page есть 2 флага:
Old version (версия актуальна для какой либо транзакции) и
Dead record (блок данных удален (не используется))..
При удалении выставляется Dead record и все. Сервер "видя" Dead record может использовать это место для новых данных.
Для транзакций - страницы не выделяются (зачем?). Есть счетчик транзакций + номер последней заинтересованной транзакции (хранятся в заголовке БД - header-page). Страницы выделяюся только под данные, указатели и индексы (index page и index B-tree page).
Jack128 (2004-04-15 22:27:00) [2]
> Уточнение. Страницы БД, занятые данными, помечаются как
> неиспользуемые, а не сами записи
Вот какой вопрос: например я удалил одну запись, а на этой странице, кроме этой записи еще десяток. Как сервер узнает, что эта запись удалена, а другие нет??
3APA3A (2004-04-15 22:23:00) [3]Со страницами для данных понятно...
А для транзакций - СУБД выделяет страницы, использует их, а потом, не удаляет а тоже помечает как неиспользуемые?
LaidBack (2004-04-15 11:07:00) [4]
> 2) размер самой базы увеличился до 141 Мб
Увеличился из-за добавления записей в журнал транзакций + изменение списка свободных страниц.
bds (2004-04-15 11:04:00) [5]Уточнение. Страницы БД, занятые данными, помечаются как неиспользуемые, а не сами записи. При добавлении записей на эти страницы поверх старых данных будут писаться новые. Размер же действительно измениться только после Backup/Restore.
Jack128 (2004-04-14 23:37:00) [6]База в Ib не может уменьшиться в размерах, только увеличить..При удалении записи только помечаются как удаленные, но физически не удаляются из базы. Сделай Backup/Restore и будет тебе счастье.