|
|
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Есть некая таблица History. Это таблица Истории событий в системе. Записи бывают нескольких типов с разным сроком жизни. Каждый день в нее пишется 10% долгосрочных событий и 90% краткосрочных. Было в ней около 800 тысяч записей. Потихоньку она себе росла. Потому что каждую ночь из нее удалялись просроченные события и оставались новые краткосрочные и долгосрочные события, добавленные за сутки. В один прекрасный день в эту таблицу было записано 2 миллиона краткосрочных записей, которые были дня через два удалены, но таблица продолжает расти. В тот момент у меня стояли PTCFREE=10 PCTUSED=40 (то есть, умолчательные значения). Теперь я сделал PTCFREE=5 PCTUSED=90. Есть ли способ пересоздать FREELIST ? Импорт/экспорт, наверное, будет сильно затруднен в связи с наличием в ней LONG поля. Поможет ли UPDATE всех записей с изменением размера записи ? Или, например, добавить в таблицу поле, затем его удалить? Что может помочь установить новые параметры PCTFREE/PCTUSED и включить полупустые экстенты в список FREE ? Спасибо in advance. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 19:07:34 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 20:10:20 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 20:47:24 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
К сожалению таблица была изначально создана в DMT. Хотелось бы, конечно, перекинуть ее в новый LMT, который я под нее специально создал. Сейчас пока пытаюсь добиться остановки роста. Так как остановить работу юзеров я не могу, то добавил числовой столбец пустым и вот уже много часов не спеша наполняю его числом. Во всяком случае это действие я могу делать траспарентно работе юзеров. А вот удалять столбец уже на фоне работы юзеров не получится, наверное. Так как это центровая таблица, то и завязки на нее ВО ВСЕХ пакетах. Предполагаю, что нужно будет сделать его UNUSED, валидировать все модули, а потом DROP UNUSED. Я могу на короткое время (на минуту) закрыть сервак чтобы добавить столбец или сделать его UNUSED, но вот на все время DROP COLUMN остановить сервер смерти подобно... Вопрос: правильно ли я понимаю, что при выполнее DROP UNUSED зависимые пакеты не инвалидируются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 08:52:35 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Не помню где вычитал, что если выполнить delete всего, а затем rollback, freelist-ы таки перестроятся. Не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 08:58:39 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Delete тут не поможет, так как на параметры экстента это не влияет. А вот truncate table можно, с последующей закачкой скажем из файла экспорта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:09:07 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Я имел в виду, чтобы вступило в силу НОВОЕ значение PCTUSED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:16:27 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Новое значение будет применимо только для новых экстентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:18:39 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Я и говорю, что где то вычитал, что после rollback во freelist будут возвращены блоки, удовлетворяющие новому PCTUSED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:20:20 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
to Gluk (Kazan): Источник в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:23:07 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Более точно, pctfree остается, а задавать pctused нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:30:32 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Моя найти по журналу :) http://dsvolk.msk.ru/oracle/faq/dba.php#pct ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 09:42:04 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:45:02 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
to SY: Да, я не правильно сказал, я имел ввиду блоки , а не экстенты. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:54:02 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
2 SY Вы абсолютно правильно расписали схему работы при вставках новых записей. Но остается проблема обновлений и миграции строк, для которой и задается pctfree. Поэтому даже при segment space management auto остается необходимость задавать pctfree. Но pctused задавать уже нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 15:26:13 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
И еще один связанные вопрос: случилось так, что один из экстентов этой самой History получился большой -- 300мег. Кроме него есть еще и поменьше, всего 900 экстентов. Так вот, стоит ли мне заботиться об этом огромном экстенте или пусть живет? И сразу в ту же кассу, если стоит от него избавиться, то как это сделать? Таблица сейчас отхватила 4.4Гб, реально данных на 1.3Гб и она не растет очень круто. Только вот выхватить у нее сколько-нибудь из излишне захваченных 2.5 Гб мне никак не удается... Да и LONG этот ну совсем меня достал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 16:45:01 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Наверное, pctincrease не нулевой, тогда каждый следующий экстент больше предыдущего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 17:06:36 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 17:09:06 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
2 SY alter table move не будет работать из-за наличия колонки long. Поэтому остается только импорт-экспорт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 17:28:09 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 17:51:45 |
|
||
|
Таблица продолжает пухнуть, хотя половину записей удалили
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. Так и сделаю -- скопирую SQLплюсом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 07:25:47 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32184926&tid=1989897]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 471ms |

| 0 / 0 |
