powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблица продолжает пухнуть, хотя половину записей удалили
22 сообщений из 22, страница 1 из 1
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184735
Есть некая таблица History.
Это таблица Истории событий в системе.
Записи бывают нескольких типов с разным сроком жизни.
Каждый день в нее пишется 10% долгосрочных событий и 90% краткосрочных.
Было в ней около 800 тысяч записей. Потихоньку она себе росла.
Потому что каждую ночь из нее удалялись просроченные события и оставались новые краткосрочные и долгосрочные события, добавленные за сутки.
В один прекрасный день в эту таблицу было записано 2 миллиона краткосрочных записей, которые были дня через два удалены, но таблица продолжает расти.
В тот момент у меня стояли PTCFREE=10 PCTUSED=40 (то есть, умолчательные значения).
Теперь я сделал PTCFREE=5 PCTUSED=90.
Есть ли способ пересоздать FREELIST ?
Импорт/экспорт, наверное, будет сильно затруднен в связи с наличием в ней LONG поля.
Поможет ли UPDATE всех записей с изменением размера записи ?
Или, например, добавить в таблицу поле, затем его удалить?
Что может помочь установить новые параметры PCTFREE/PCTUSED и включить полупустые экстенты в список FREE ?

Спасибо in advance.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184772
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yes, you need to update existing rows. Add a column, e.g. varchar2(1) default 'A' and then drop the column. That should recalculate free list based on new PCTUSED value. This should eliminate (for a while) table growth. However, you will not be able to decrease allocated space - when в один прекрасный день в эту таблицу было записано 2 миллиона краткосрочных записей, it pushed HWM way up (High Water Mark) and now you are stuck with it (unless you exp/drop/recreate/imp or alter table move - which might not work since you have long column).

SY.
P.S. Since you table is quite large DROP COLUMN might error out with either out of memory or rollback space. I suggest you use DROP COLUMN CHECKPOINT and if it still errors out use DROP COLUMN CONTINUE.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184788
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Any chance History table is in LMT with AUTO extent management? If so, then PCTFREE/PCTUSED are irrelevant since free space is info is stored in bitmap.

SY.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184898
К сожалению таблица была изначально создана в DMT.
Хотелось бы, конечно, перекинуть ее в новый LMT, который я под нее специально создал.
Сейчас пока пытаюсь добиться остановки роста.
Так как остановить работу юзеров я не могу, то добавил числовой столбец пустым и вот уже много часов не спеша наполняю его числом. Во всяком случае это действие я могу делать траспарентно работе юзеров.
А вот удалять столбец уже на фоне работы юзеров не получится, наверное.
Так как это центровая таблица, то и завязки на нее ВО ВСЕХ пакетах.
Предполагаю, что нужно будет сделать его UNUSED, валидировать все модули, а потом DROP UNUSED.
Я могу на короткое время (на минуту) закрыть сервак чтобы добавить столбец или сделать его UNUSED, но вот на все время DROP COLUMN остановить сервер смерти подобно...
Вопрос: правильно ли я понимаю, что при выполнее DROP UNUSED зависимые пакеты не инвалидируются?
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184904
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню где вычитал, что если выполнить delete всего, а затем rollback, freelist-ы таки перестроятся. Не проверял.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184911
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delete тут не поможет, так как на параметры экстента это не влияет.
А вот truncate table можно, с последующей закачкой скажем из файла экспорта.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184918
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду, чтобы вступило в силу НОВОЕ значение PCTUSED
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184923
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новое значение будет применимо только для новых экстентов.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184926
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и говорю, что где то вычитал, что после rollback во freelist будут возвращены блоки, удовлетворяющие новому PCTUSED
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184929
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Gluk (Kazan):

Источник в студию.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184938
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Any chance History table is in LMT with AUTO extent management? If so, then PCTFREE/PCTUSED are irrelevant since free space is info is stored in bitmap. 


Более точно, pctfree остается, а задавать pctused нельзя.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32184951
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя найти по журналу :)

http://dsvolk.msk.ru/oracle/faq/dba.php#pct
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32185526
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softbuilder:

>Новое значение будет применимо только для новых экстентов.

PCTFREE/PCTUSED is not extent but rather SEGMENT property. PCTUSED will be considered EVERY time row is deleted or updated. Oracle will decide whether to add block to free list based on current PCTUSED.

2 Al:

>Более точно, pctfree остается, а задавать pctused нельзя.

Not sure what you mean. I am under impression that AUTO segment management will create a bitmap with one of four possible bits set for each block (25%, 50%, 75% and 100%). When there is a request to insert a row Oracle will calculate row size/block size * 100 and will know percentage needed. Then it will look for a block with proper bit set in the bitmap. After row is inserted Oracle recalculates data to block size ratio and updates bitmap if needed. This completely replaces PCTFREE/PCTUSED - that is why AUTO does not use free lists. Please let me know if it is not the way AUTO works.

SY.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32185547
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to SY:
Да, я не правильно сказал, я имел ввиду блоки , а не экстенты.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
The effects of changing the block utilization parameters are as follows:
• PCTFREE: A change to PCTFREE will affect future inserts. Blocks that are not
used for inserts because they had already been filled to ( 100 /PCTFREE) will not
be affected until they are back on the free list. They can only be placed on the free
list if their use drops below PCTUSED.
• PCTUSED: Any change to PCTUSED will affect all the blocks in the table. If a
row is updated or deleted, the block containing the row will be checked for its use
and reused for inserts if the use is below PCTUSED.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32185597
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY

Вы абсолютно правильно расписали схему работы при вставках новых записей. Но остается проблема обновлений и миграции строк, для которой и задается pctfree. Поэтому даже при segment space management auto остается необходимость задавать pctfree. Но pctused задавать уже нельзя.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186756
И еще один связанные вопрос: случилось так, что один из экстентов этой самой History получился большой -- 300мег. Кроме него есть еще и поменьше, всего 900 экстентов.
Так вот, стоит ли мне заботиться об этом огромном экстенте или пусть живет? И сразу в ту же кассу, если стоит от него избавиться, то как это сделать?
Таблица сейчас отхватила 4.4Гб, реально данных на 1.3Гб и она не растет очень круто. Только вот выхватить у нее сколько-нибудь из излишне захваченных 2.5 Гб мне никак не удается... Да и LONG этот ну совсем меня достал...
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186783
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, pctincrease не нулевой, тогда каждый следующий экстент больше предыдущего.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186785
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
You can try ALTER TABLE DEALLOCATE UNUSED, however as I already mentioned, most likely it will not work. When you inserted 2 million rows it pushed HWM way up. As a result you can not deallocate that space. You would have to either ALTER TABLE MOVE or EXP, TRUNCATE TABLE and IMP data back.

SY.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186805
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY

alter table move не будет работать из-за наличия колонки long. Поэтому остается только импорт-экспорт.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186831
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Al,

Yeah, I missed that LONG column. But I think there might be one more option. SQL*Plus COPY command. It takes LONG (all you need to do is SET LONG=nnn, where nnn >= the longest LONG in the table). This way we can rename HISTORY table to HISTORY_OLD, create an empty HISTORY table with proper prysical and storage attributes, issue SQL*Plus COPY command and then get rid of HISTORY_OLD. This should be faster than EXP/IMP combination (assuming there is enough free space in the tablespace for the second copy of HISTORY table).

SY
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32186994
Большое спасибо. Так и сделаю -- скопирую SQLплюсом.
...
Рейтинг: 0 / 0
Таблица продолжает пухнуть, хотя половину записей удалили
    #32187435
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Поплюев Алексей:

Make sure you

SET LONG=nnn

before COPY. Otherwise your longs > 80 bytes (which is the default) will be truncated without any notice.

SY
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблица продолжает пухнуть, хотя половину записей удалили
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]