Определение размера индекса и таблицы, BLOB поля в ORACLE
Приложенные скрипты помогут определить физический размер отдельного индекса, отдельной таблицы, таблицы и всех её индексов.
Узнаем размер индекса в ORACLE.
select segment_name index_name, from dba_segments where owner = 'ИМЯ_СХЕМЫ' and segment_type = 'INDEX' and segment_name = 'ИМЯ_ИНДЕКСА' group by segment_name ORDER BY index_size_mb desc;
Узнаем размер таблицы в ORACLE.
select segment_name table_name, from dba_segments where owner = 'ИМЯ_СХЕМЫ' and segment_type = 'TABLE' and segment_name = 'ИМЯ_ТАБЛИЦЫ' group by segment_name
Определяем размер таблицы и всех ее индексов Oracle
select t.table_name table_name, t.table_size table_size_KB, i.index_name index_name, i.index_size index_size_KB from (select segment_name table_name, from dba_segments where owner = 'ИМЯ_СХЕМЫ' and segment_type = 'TABLE' and segment_name = 'ИМЯ_ТАБЛИЦЫ' group by segment_name) t left join dba_indexes ti on ti.table_name = t.table_name from dba_segments where owner = 'ИМЯ_СХЕМЫ' and segment_type = 'INDEX' group by segment_name) i on i.index_name = ti.index_name order by i.index_size desc;
Определение размера BLOD поля
from 'ИМЯ_ТАБЛИЦЫ'
Как узнать размер секционированной таблицы с lob-полями
Если таблица секционирована, то её размер равен суммарному размеру всех сегментов её секций. Если при этом она содержит lob — поля, то к сумме размеров секций надо прибавить сумму размеров всех lob-сегментов, ассоциированных с этой таблицей. Этот запрос сводит всё воедино:
SELECT ( ( SELECT SUM(s.bytes) FROM dba_lobs d, dba_segments s WHERE d.segment_name = s.segment_name AND d.owner = 'CUBE' AND d.table_name = 'PART_LOB_TABLE' ) + ( SELECT SUM(d.bytes) FROM dba_segments d WHERE d.owner = 'CUBE' AND d.segment_name = 'PART_LOB_TABLE' ) FROM dual;
Размер таблиц в указанной схеме с учет LOB полей
SELECT tab.owner , tab.table_name FROM dba_segments seg JOIN dba_tables tab ON seg.segment_name = tab.table_name AND seg.owner = tab.owner LEFT JOIN dba_lobs lobs ON lobs.table_name = tab.table_name AND lobs.owner = tab.owner LEFT JOIN dba_segments seg_lobs ON seg_lobs.segment_name = lobs.segment_name AND tab.owner in ('наименование_схемы') --AND tab.table_name = upper('наименование_таблицы') -- ограничение на таблицу GROUP BY tab.owner, tab.table_name ORDER BY mb desc;
Выводит размер таблиц, индексов и кол-во партиций по всем схемам
Выводит таблицы размер, которых больше одного 1 Гб. Это условие в запросе можно заменить на свое.
SELECT owner , segment_name , segment_type , tablespace_name FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE oracle_maintained = 'N' ) GROUP BY owner , segment_name , segment_type , tablespace_name HAVING ORDER BY owner, #cc66cc;">5 DESC
Гость 6 лет назад #