Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1
  • 2
  • 3

ТЕМА:

Re: dump of DB block в Oracle 12 года 9 мес. назад #2806

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>

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: dump of DB block в Oracle 12 года 9 мес. назад #2807

Может быть это соответствует истине.
Поскольку
1) в заголовке сегмента указатель на 1 блок во фреелист и ХWМ это 2 разных указателя
2) указатель в хвостовом блоке фреелист должен быть пустой (т.е. = 0) - конец списка
3) в данной таблице нет ни одного блока который мог бы бит размещенным во фреелист, т.е. конец списка пустых блоков находится в заголовке сегмента.

то оракл будет использовать указатель ХWМ как указатель на 1-й свободный блок.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: dump of DB block в Oracle 12 года 9 мес. назад #2808

3) в данной таблице нет ни одного блока который мог бы бит размещенным во фреелист, т.е. конец списка пустых блоков находится в заголовке сегмента.


так разницы нет, есть ли там освобожденные блоки, все равно они показываются отдельно:
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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: dump of DB block в Oracle 12 года 9 мес. назад #2809

Фактически в заголовке сегмента содержится два указателя (точнее два типа указателей)
1) один указатель на HWM
2) один или несколько указателей на freelsts (в соотвествии с параметром freelists для таблицы)
3) Каждый freelist список заканчивается указателем с 0 значением т.е.
Если имеется хотя-бы один блок во списке freelist то в заголовке сегмента значение указателя в данном списке равно номеру этого блока, если данный блок
проследний то указатель = 0.

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

-- для таблицы Т - нет ни одного блока в списке freelist (и oracle будет использовать
указатель на HWM для insert)
-- для таблицы Т1 - есть какой-либо 1 или несколько блоков в списке freelists и в среднем
свободное пространство в этих блоках = 7771 байт
(в этой ситуации oracle будет пробегать по указателям на freelist блоки во первых для insert а затем только применять HWM)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: dump of DB block в Oracle 12 года 9 мес. назад #2810

Привет!
Эти предположения легко проверить. Нужно удалить часть строк и вновь собрать статистику

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: dump of DB block в Oracle 12 года 9 мес. назад #2811

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
В общем, пока я спрашивала мнение о проблеме у аудитории форума (большое спасибо выам, "хозяин" базы уже третий день подряд только что и делал, как ворошил металинк.

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

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

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

Заодно выяснилось, что с помощью пакета dbms_space можно обойтись и без дампа блоков -- процедура возвращает, сколько блоков доступно в каждом списке.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
Время создания страницы: 0.219 секунд