Определение размера индекса и таблицы, BLOB поля в ORACLE

Приложенные скрипты помогут определить физический размер отдельного индекса, отдельной таблицы, таблицы и всех её индексов.

Узнаем размер индекса в ORACLE.

  1. select segment_name index_name,
  2. ceil(sum(bytes) / #cc66cc;">1024) index_size_kb,
  3. ceil(sum(bytes) / #cc66cc;">1024 / #cc66cc;">1024) index_size_mb
  4. from dba_segments
  5. where owner = 'ИМЯ_СХЕМЫ'
  6. and segment_type = 'INDEX'
  7. and segment_name = 'ИМЯ_ИНДЕКСА'
  8. group by segment_name
  9. ORDER BY index_size_mb desc;
  10.  

Узнаем размер таблицы в ORACLE.

  1. select segment_name table_name,
  2. ceil(sum(bytes) / #cc66cc;">1024) table_size
  3. from dba_segments
  4. where owner = 'ИМЯ_СХЕМЫ'
  5. and segment_type = 'TABLE'
  6. and segment_name = 'ИМЯ_ТАБЛИЦЫ'
  7. group by segment_name
  8.  

Определяем размер таблицы и всех ее индексов Oracle

  1. select t.table_name table_name,
  2. t.table_size table_size_KB,
  3. i.index_name index_name,
  4. i.index_size index_size_KB
  5. from (select segment_name table_name,
  6. ceil(sum(bytes) / #cc66cc;">1024) table_size
  7. from dba_segments
  8. where owner = 'ИМЯ_СХЕМЫ'
  9. and segment_type = 'TABLE'
  10. and segment_name = 'ИМЯ_ТАБЛИЦЫ'
  11. group by segment_name) t
  12. left join dba_indexes ti
  13. on ti.table_name = t.table_name
  14. left join (select segment_name index_name,
  15. ceil(sum(bytes) / #cc66cc;">1024) index_size
  16. from dba_segments
  17. where owner = 'ИМЯ_СХЕМЫ'
  18. and segment_type = 'INDEX'
  19. group by segment_name) i
  20. on i.index_name = ti.index_name
  21. order by i.index_size desc;
  22.  

Определение размера BLOD поля

  1. select sum(dbms_lob.getlength('BLOB поле') / #cc66cc;">1024/ #cc66cc;">1024) size_mb
  2. from 'ИМЯ_ТАБЛИЦЫ'
  3.  

Как узнать размер секционированной таблицы с lob-полями

Если таблица секционирована, то её размер равен суммарному размеру всех сегментов её секций. Если при этом она содержит lob — поля, то к сумме размеров секций надо прибавить сумму размеров всех lob-сегментов, ассоциированных с этой таблицей. Этот запрос сводит всё воедино:

  1. SELECT
  2. (
  3. (
  4. SELECT SUM(s.bytes)
  5. FROM dba_lobs d, dba_segments s
  6. WHERE d.segment_name = s.segment_name
  7. AND d.owner = 'CUBE'
  8. AND d.table_name = 'PART_LOB_TABLE'
  9. )
  10. +
  11. (
  12. SELECT SUM(d.bytes)
  13. FROM dba_segments d
  14. WHERE d.owner = 'CUBE'
  15. AND d.segment_name = 'PART_LOB_TABLE'
  16. )
  17. )/#cc66cc;">1024/#cc66cc;">1024/#cc66cc;">1024, #cc66cc;">2) gb
  18. FROM dual;
  19.  

Размер таблиц в указанной схеме с учет LOB полей

  1. SELECT tab.owner
  2. , tab.table_name
  3. , sum(round((nvl(seg.bytes,#cc66cc;">0) + nvl(seg_lobs.bytes,#cc66cc;">0)) /#cc66cc;">1024/#cc66cc;">1024, #cc66cc;">2)) mb
  4. , sum(round((nvl(seg.bytes,#cc66cc;">0) + nvl(seg_lobs.bytes,#cc66cc;">0)) /#cc66cc;">1024/#cc66cc;">1024/#cc66cc;">1024, #cc66cc;">2)) gb
  5. FROM dba_segments seg
  6. JOIN dba_tables tab
  7. ON seg.segment_name = tab.table_name
  8. AND seg.owner = tab.owner
  9. LEFT
  10. JOIN dba_lobs lobs
  11. ON lobs.table_name = tab.table_name
  12. AND lobs.owner = tab.owner
  13. LEFT
  14. JOIN dba_segments seg_lobs
  15. ON seg_lobs.segment_name = lobs.segment_name
  16. WHERE #cc66cc;">1=#cc66cc;">1
  17. AND tab.owner in ('наименование_схемы')
  18. --AND tab.table_name = upper('наименование_таблицы') -- ограничение на таблицу
  19. GROUP
  20. BY tab.owner, tab.table_name
  21. ORDER
  22. BY mb desc;
  23.  

Выводит размер таблиц, индексов и кол-во партиций по всем схемам

Выводит таблицы размер, которых больше одного 1 Гб. Это условие в запросе можно заменить на свое.

  1. SELECT owner
  2. , segment_name
  3. , segment_type
  4. , tablespace_name
  5. , ROUND(SUM(bytes) / #cc66cc;">1024 / #cc66cc;">1024 / #cc66cc;">1024) gb
  6. , COUNT('x') cnt
  7. FROM dba_segments
  8. WHERE owner IN (SELECT username
  9. FROM dba_users
  10. WHERE oracle_maintained = 'N'
  11. )
  12. GROUP
  13. BY owner
  14. , segment_name
  15. , segment_type
  16. , tablespace_name
  17. HAVING
  18. SUM(bytes) / #cc66cc;">1024 / #cc66cc;">1024 / #cc66cc;">1024 >= #cc66cc;">1
  19. ORDER
  20. BY owner, #cc66cc;">5 DESC
  21.  
07:29
22.05K
0
Гость 6 лет назад #
Спасибо, Алексей.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.