|
| |
Куда девается свободное место при удалении записей из таблицы и как с этим бороться?
> Ситуация: есть логируемая база с весьма сложной структурой и огромным
> объемом транзакций, в ней есть ведущая таблица связанная с массой других и
> триггерами delete cascade. Через месяц данные становятся ненужны и
подлежат
> удалению. Естесссно после делита логи трудятся вовсю! ;-) Но после
удаления
> места в базе не прибывает! Недавно удалил 90% записей, а всеравно приходит
> сообщение, что 91% объема занят. В настоящее время база имеет уже 6 чанков
и
> требует еще места! Можно конечно сделать экспорт/импорт, но это не
выход...
> Объясните мне глупому, куда место девается? Если в логируемой базе записи
> удаляются только логически, то как бы их снести начисто? Перевод базы в
> нелогируемый режим и удаление неполучился, т.к. в этот момент сервер
меняет
> триггеры и на удаление получаешь отлуп, т.к. есть ссылки на другие
таблицы.
> Сервер WG 7.30TC2 на NT 4 SP5.
При удалении записей Informix не производит "уплотнение" записей
(перемещение используемых страниц на освободившееся место и удаление
очищенных от страниц с данными экстентов из tablespace), а использует
освободившиеся странички tablespacе только при вставке новых записей
(естественно при вставке именно в эту же таблицу). То есть так просто при
удалении записей место он тебе не отдаст.
Подробнее можно прочитать в
Performance Guide.
Table and Index Performance Consideration.
Improving Performance for Nonfragmented Tables and Table Fragments.
Managing Extents.
Reclaiming Unused Space Within an Extent.
Убрать возникшую фрагментацию и вернуть неиспользованное пространство можно
следующим образом:
ALTER INDEX TO CLUSTER и обратно (либо дропнуть их и создать заново) -
перелопатит место которое занимают индексы.
ALTER FRAGMENT ON table <tablename> INIT IN <dbspacename> обработает
экстенты с данными.
Да, и не забудь про update statistics
|