Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dump of DB block, или охота за free list'ом / 13 сообщений из 13, страница 1 из 1
12.02.2003, 02:08
    #32104842
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
С помощью чего можно получить дамп блока базы данных???

Интересует системная информация в блоке, как то, сколько в нём свободно места, и входит ли этот блок в состав 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_: Не у одних у вас, оказывается, такая проблема. Тенденция (печальная), однако...
...
Рейтинг: 0 / 0
12.02.2003, 08:28
    #32104890
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
Команда недокументирована:
alter system dump datafile [#файла] block min [BlockMin] block max [&BlockMax];

но в начале нужно из dba_segments получить №№ требуемых блоков и номер файла (из dba_data_filles)
Дамп печатается в прользовательский trace файл ..../admin/$SID/udump

В распечатке дампа freelists видны плохо но они есть.
...
Рейтинг: 0 / 0
12.02.2003, 16:02
    #32105257
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
>имеется таблица, с 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.
SELECT dbms_rowid.rowid_block_number(ROWID) bn, 
                 DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) fn, count(*)
from t1 
group by dbms_rowid.rowid_block_number(ROWID), 
             DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID);


т.е. увидишь сколько у тебя строк в каждом блоке. Это поможет конечно только при условии, что размеры строк примерно одинаковые.

>FREELISTS=1. В металинковской note про freelists такое описывали для
>случая FREELISTS>1, обещая в случае с FREELISTS=1 просто блокировку
>процесса, а не выделение блоков за HWM...

имхо FREELISTS тут непричем. Он играет роль при параллельном сервере. Чтоб у каждого инстанса был свой FREELIST.
...
Рейтинг: 0 / 0
12.02.2003, 16:58
    #32105313
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
>>> имхо FREELISTS тут непричем. Он играет роль при параллельном сервере.

При OPS или RAC играет роль не FREELISTS a FREELIST GROUPS.
А при обычном сервере для снижения конкуренции при INSERTs за выделения блоков нужно регулировать именно FREELISTS.
...
Рейтинг: 0 / 0
12.02.2003, 18:30
    #32105370
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
>При OPS или RAC играет роль не FREELISTS a FREELIST GROUPS.
>А при обычном сервере для снижения конкуренции при INSERTs за выделения
>блоков нужно регулировать именно FREELISTS.

Да, согласен.

Интересно вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select BLOCKS,EMPTY_BLOCKS,AVG_SPACE,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS
   2   from user_tables where table_name='T';

    BLOCKS EMPTY_BLOCKS  AVG_SPACE AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS
 ---------- ------------ ---------- ------------------------- -------------------
 
         19            108         1019                           0                     0 

SQL>

Т.е. те блоки, которые выше hwm не показываются в поле NUM_FREELIST_BLOCKS?
...
Рейтинг: 0 / 0
12.02.2003, 19:18
    #32105400
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
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
...
Рейтинг: 0 / 0
12.02.2003, 19:21
    #32105401
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> create table t as select * from all_objects;

Tabelle wurde angelegt.

SQL> analyze table t compute statistics;

Tabelle wurde analysiert.

SQL> select BLOCKS,EMPTY_BLOCKS,AVG_SPACE,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS
   2   from user_tables where table_name='T';

    BLOCKS EMPTY_BLOCKS  AVG_SPACE AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS
 ---------- ------------ ---------- ------------------------- -------------------
 
         19            108         1015                           0                     0 

SQL>
...
Рейтинг: 0 / 0
12.02.2003, 20:12
    #32105417
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
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.
...
Рейтинг: 0 / 0
12.02.2003, 20:18
    #32105420
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
>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.
SQL> select BLOCKS,EMPTY_BLOCKS,AVG_SPACE,AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS
   2   from user_tables where table_name='T1';

    BLOCKS EMPTY_BLOCKS  AVG_SPACE AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS
 ---------- ------------ ---------- ------------------------- -------------------
 
         19            108         5308                        7771                    12 
...
Рейтинг: 0 / 0
13.02.2003, 06:52
    #32105471
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
Фактически в заголовке сегмента содержится два указателя (точнее два типа указателей)
1) один указатель на HWM
2) один или несколько указателей на freelsts (в соотвествии с параметром freelists для таблицы)
3) Каждый freelist список заканчивается указателем с 0 значением т.е.
Если имеется хотя-бы один блок во списке freelist то в заголовке сегмента значение указателя в данном списке равно номеру этого блока, если данный блок
проследний то указатель = 0.

Что собственно и наблюдается для таблиц Т и Т1

-- для таблицы Т - нет ни одного блока в списке freelist (и oracle будет использовать
указатель на HWM для insert)
-- для таблицы Т1 - есть какой-либо 1 или несколько блоков в списке freelists и в среднем
свободное пространство в этих блоках = 7771 байт
(в этой ситуации oracle будет пробегать по указателям на freelist блоки во первых для insert а затем только применять HWM)
...
Рейтинг: 0 / 0
13.02.2003, 14:27
    #32105913
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
Эти предположения легко проверить. Нужно удалить часть строк и вновь собрать статистику
...
Рейтинг: 0 / 0
14.02.2003, 01:33
    #32106321
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
Сам начал, сам и закончу топик...

В общем, пока я спрашивал мнение о проблеме у аудитории форума (большое спасибо ShgGena, .dba и killed), "хозяин" базы уже третий день подряд только что и делал, как ворошил металинк.

В итоге выяснилось, что в Oracle (по крайней мере начиная с 8.1.7 EE, на котором всё и происходило) есть пакет dbms_repair, в котором есть процедура, которая восстанавливает freelist.

Точнее, если нет FREELISTS GROUPS, то все "свободные" блоки собираются в master freelist, иначе по принципу round-robin равномерно распределяются по всем спискам.

В принципе, этого хватило для всех таблиц, а ту большую потом "подвигали" в рамках того же самого tablespace, после чего убрались лишние экстенты.

Заодно выяснилось, что с помощью пакета dbms_space можно обойтись и без дампа блоков -- процедура возвращает, сколько блоков доступно в каждом списке.
...
Рейтинг: 0 / 0
14.02.2003, 22:28
    #32106823
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dump of DB block, или охота за free list'ом
мне кажется, что freelists, а тем более freelist groups не имеют прямого отношения к общему объему таблицы. Гораздо важнее правильно подобрать PCTUSED/PCTFREE. Есть хорошая статья на эту тему у Володи Демкина на dba.ru
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dump of DB block, или охота за free list'ом / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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