|
|
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
С помощью чего можно получить дамп блока базы данных??? Интересует системная информация в блоке, как то, сколько в нём свободно места, и входит ли этот блок в состав Master Free List. К чему такая любознательность: имеется таблица, с PCT_FREE/PCT_USED=98/1, то есть "запихнуть данные в блок до упора"; данные не изменяются, так что сие даже поощряется результат COMPUTE STATISTICS (да и просто анализ выборки) показывает, что данных в таблице на 800 мег но сумма blocks по dba_extents, показывает, что таблица скушала уже 2 гига; экстенты все одинаковые, по 50 метров новые записи добавляются в таблицу поочерёдно из 10 параллельных процессов, но конкурируют они друг с дружкой очень редко удаляются записи из таблицы массово, порцией примерно 1% от всех записей, но это порция включает в себя все записи за определённый день Вопрос: почему таблица растёт, при условии, что в среднем за день, приход и уход записей одинаков??? Причём растёт она такими темпами, как будто блоки, из которых удалили записи, никогда не возвращаются в список свободных блоков. FREELISTS=1. В металинковской note про freelists такое описывали для случая FREELISTS>1, обещая в случае с FREELISTS=1 просто блокировку процесса, а не выделение блоков за HWM... Может кто-то сталкивался с подобным??? 2SAA_: Не у одних у вас, оказывается, такая проблема. Тенденция (печальная), однако... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 02:08 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Команда недокументирована: alter system dump datafile [#файла] block min [BlockMin] block max [&BlockMax]; но в начале нужно из dba_segments получить №№ требуемых блоков и номер файла (из dba_data_filles) Дамп печатается в прользовательский trace файл ..../admin/$SID/udump В распечатке дампа freelists видны плохо но они есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 08:28 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
>имеется таблица, с PCT_FREE/PCT_USED=98/1, то есть "запихнуть данные в >блок до упора"; данные не изменяются, так что сие даже поощряется ну тут очевидно наоборот PCT_FREE=1, а PCT_USED=98. Не так ли?:-) >результат COMPUTE STATISTICS (да и просто анализ выборки) показывает, >что данных в таблице на 800 мег >но сумма blocks по dba_extents, показывает, что таблица скушала уже 2 >гига; экстенты все одинаковые, по 50 метров интересно было бы увидить выборку из user_tables. >новые записи добавляются в таблицу поочерёдно из 10 параллельных >процессов, но конкурируют они друг с дружкой очень редко действительно parallel processes? Тогда проблема может быть в этом. Т.к. каждый параллельный процесс пишет в новый экстент выше hwm. >удаляются записи из таблицы массово, порцией примерно 1% от всех >записей, но это порция включает в себя все записи за определённый день >Вопрос: почему таблица растёт, при условии, что в среднем за день, приход >и уход записей одинаков??? Причём растёт она такими темпами, как будто >блоки, из которых удалили записи, никогда не возвращаются в список >свободных блоков. мне кажется, что на все эти вопросы можно получить ответ таким запросом: Код: plaintext 1. 2. 3. 4. т.е. увидишь сколько у тебя строк в каждом блоке. Это поможет конечно только при условии, что размеры строк примерно одинаковые. >FREELISTS=1. В металинковской note про freelists такое описывали для >случая FREELISTS>1, обещая в случае с FREELISTS=1 просто блокировку >процесса, а не выделение блоков за HWM... имхо FREELISTS тут непричем. Он играет роль при параллельном сервере. Чтоб у каждого инстанса был свой FREELIST. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 16:02 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
>>> имхо FREELISTS тут непричем. Он играет роль при параллельном сервере. При OPS или RAC играет роль не FREELISTS a FREELIST GROUPS. А при обычном сервере для снижения конкуренции при INSERTs за выделения блоков нужно регулировать именно FREELISTS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 16:58 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
>При OPS или RAC играет роль не FREELISTS a FREELIST GROUPS. >А при обычном сервере для снижения конкуренции при INSERTs за выделения >блоков нужно регулировать именно FREELISTS. Да, согласен. Интересно вот что: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Т.е. те блоки, которые выше hwm не показываются в поле NUM_FREELIST_BLOCKS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 18:30 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Chtoto ne ochen realnoe. takoe vozmozno (kak ya polagau) tolko: 1) Esly v tablice voobche ne zapolnen 1 block 2) Esly ne vypolnalsiya ANALIZE TABLE dlya dannoy tablizy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 19:18 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 19:21 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Moget bit eto sootvetstvuet istine. Poskolku 1) v zagolovke segmenta ukazatel na 1 block vo freelist i HWM eto 2 raznih ukazatelya 2) ukazatel v hvostovom bloke freelist dolgen byt pustoy (t.e. = 0) - konec spiska 3) v dannoy tablice net ni odnogo bloka kotoriy mog by bit razmeschennim vo freelist, t.e. konec spiska pustih blokov nahoditsya v zagolovke segmenta. to oracle budet ispolzovat ukazatel HWM kak ukazatel na 1-y svobodniy blok. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 20:12 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
>3) v dannoy tablice net ni odnogo bloka kotoriy mog by bit razmeschennim vo >freelist, t.e. konec spiska pustih blokov nahoditsya v zagolovke segmenta. так разницы нет, есть ли там освобожденные блоки, все равно они показываются отдельно: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2003, 20:18 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Фактически в заголовке сегмента содержится два указателя (точнее два типа указателей) 1) один указатель на HWM 2) один или несколько указателей на freelsts (в соотвествии с параметром freelists для таблицы) 3) Каждый freelist список заканчивается указателем с 0 значением т.е. Если имеется хотя-бы один блок во списке freelist то в заголовке сегмента значение указателя в данном списке равно номеру этого блока, если данный блок проследний то указатель = 0. Что собственно и наблюдается для таблиц Т и Т1 -- для таблицы Т - нет ни одного блока в списке freelist (и oracle будет использовать указатель на HWM для insert) -- для таблицы Т1 - есть какой-либо 1 или несколько блоков в списке freelists и в среднем свободное пространство в этих блоках = 7771 байт (в этой ситуации oracle будет пробегать по указателям на freelist блоки во первых для insert а затем только применять HWM) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2003, 06:52 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Эти предположения легко проверить. Нужно удалить часть строк и вновь собрать статистику ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2003, 14:27 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
Сам начал, сам и закончу топик... В общем, пока я спрашивал мнение о проблеме у аудитории форума (большое спасибо ShgGena, .dba и killed), "хозяин" базы уже третий день подряд только что и делал, как ворошил металинк. В итоге выяснилось, что в Oracle (по крайней мере начиная с 8.1.7 EE, на котором всё и происходило) есть пакет dbms_repair, в котором есть процедура, которая восстанавливает freelist. Точнее, если нет FREELISTS GROUPS, то все "свободные" блоки собираются в master freelist, иначе по принципу round-robin равномерно распределяются по всем спискам. В принципе, этого хватило для всех таблиц, а ту большую потом "подвигали" в рамках того же самого tablespace, после чего убрались лишние экстенты. Заодно выяснилось, что с помощью пакета dbms_space можно обойтись и без дампа блоков -- процедура возвращает, сколько блоков доступно в каждом списке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2003, 01:33 |
|
||
|
dump of DB block, или охота за free list'ом
|
|||
|---|---|---|---|
|
#18+
мне кажется, что freelists, а тем более freelist groups не имеют прямого отношения к общему объему таблицы. Гораздо важнее правильно подобрать PCTUSED/PCTFREE. Есть хорошая статья на эту тему у Володи Демкина на dba.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2003, 22:28 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32104890&tid=1991811]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 465ms |

| 0 / 0 |
