Как узнать размер таблицы в oracle
Перейти к содержимому

Как узнать размер таблицы в oracle

Как рассчитать размер таблиц в Oracle

Похоже, вы пытаетесь ответить на коллекцию. Для этого вам нужно настроить сериализатор (или получить данные в виде массива).

6 ответов

Зависит, что Вы подразумеваете «под размером таблицы». Таблица не касается определенного файла в файловой системе. Таблица будет находиться на табличной области (возможно несколько табличных областей, если она будет разделена, и возможно несколько табличных областей, если Вы также хотите принять во внимание индексы на таблице). Табличная область будет часто иметь несколько таблиц в ней и может быть распространена через несколько файлов.

, Если Вы оцениваете, в каком количестве пространства Вы будете нуждаться для будущего роста таблицы, затем avg_row_len умноженный на количество строк в таблице (или количество строк Вы ожидаете в таблице) будет хорошее руководство. Но Oracle оставит некоторое пространство свободным на каждом блоке, частично чтобы позволить, чтобы строки ‘выросли’, если они будут обновлены, частично потому что не может быть возможно соответствовать другой всей строке на том блоке (например, 8K блок только соответствовал бы 2 строкам 3K, хотя это будет экстремальным примером, поскольку 3K намного больше, чем большинство размеров строки). Таким образом, БЛОКИ (в USER_TABLES) могли бы быть лучшим руководством.

, Но если бы у Вас было 200 000 строк в таблице, удалил половину из них, затем таблица все еще ‘владела’ бы тем же количеством блоков. Это не выпускает их для других таблиц для использования. Кроме того, блоки не добавляются к таблице индивидуально, но в группах, названных ‘степенью’. Таким образом, там обычно будут EMPTY_BLOCKS (также в USER_TABLES) в таблице.

Вы могли бы интересоваться этим запросом. Это говорит Вам, сколько места выделено для каждой таблицы, принимающей во внимание индексы и любые СВЕЧИ на таблице. Часто Вам интересно знать, «Сколько пробелов таблица Purchase Order берет, включая любые индексы», а не просто саму таблицу. Можно всегда копаться в деталях. Обратите внимание, что это требует доступа к представлениям DBA_*.

Во-первых, соберите статистику оптимизатора на таблице (если Вы уже не имеете):

ПРЕДУПРЕЖДЕНИЕ: Поскольку Justin говорит в своем ответе, заключая, что статистика оптимизатора влияет на оптимизацию запросов и не должна быть сделана без должного ухода и соображения !

Затем находят количество блоков занятым таблицей из сгенерированной статистики:

общее количество блоков, выделенных таблице, является блоками + empty_blocks + num_freelist_blocks.

блоки являются количеством блоков, которые на самом деле содержат данные.

Умножают количество блоков используемым размером блока (обычно 8 КБ) для использования пространства — например, 17 блоков x 8 КБ = 136 КБ.

, Чтобы сделать это для всех таблиц в схеме сразу:

Примечание: Изменения, внесенные в вышеупомянутое после чтения этот поток AskTom

Прежде всего я обычно предостерегал бы, что, собирая статистику таблицы, чтобы сделать, анализ пространства является потенциально опасной вещью сделать. Сбор статистики может изменить планы запросов, особенно если DBA настроил сборочное задание статистики, которое использует параметры не по умолчанию, которые Ваш вызов не использует и заставит Oracle повторно анализировать запросы, которые используют рассматриваемую таблицу, которая может быть хитом производительности. Если DBA намеренно встал из-за некоторых столов без статистики (распространенный, если Ваш OPTIMIZER_MODE , ВЫБИРАЮТ), заключая, что статистика может заставить Oracle прекращать использовать основанный на правилах оптимизатор и начинать использовать оптимизатор на основе издержек для ряда запросов, которые могут быть сильной головной болью производительности, если это неожиданно сделано в производстве. Если Ваши статистические данные точны, можно запросить USER_TABLES (или ALL_TABLES или DBA_TABLES ) непосредственно, не звоня GATHER_TABLE_STATS . Если Ваши статистические данные не точны, существует, вероятно, причина этого, и Вы не хотите нарушать статус-кво.

1111-секундный, самым близким эквивалентом процедуре SQL Server sp_spaceused является вероятная Oracle DBMS_SPACE пакет. У Tom Kyte есть хорошее show_space процедура , которая предоставляет простой интерфейс этому пакету и распечатывает информацию, подобную тому, что sp_spaceused распечатывает.

IIRC таблицы, в которых Вы нуждаетесь, являются DBA_TABLES, DBA_EXTENTS или DBA_SEGMENTS и DBA_DATA_FILES. Существует также USER_ и версии ALL_ их для таблиц, которые Вы видите, нет ли у Вас полномочий администрирования на машине.

Простой выбор, который возвращает исходные размеры таблиц на основе размера блока, также включает размер с индексом

Записки на полях внедрения

Блог по IT-технологиям и управлению проектами.
Project Management, PMP, PMI, PMBOK; Oracle (Database, Identity Manager, SOA Suite, BI, Access Manager, Weblogic, Internet Directory); Linux/Unix, Windows; OSS/BSS, Identity Management; Perl, PHP; MySQL, MSSQL; UML, IDEF; Agile, RUP/AUP; PL/SQL, C++; TFS; Java, JSF, Spring, OSGi, Hibernate, MVC, JSP, IoC, RMI, EJB, JMS, AOP, Apache Struts, Apache Felix, Apache Tomcat, AJAX, Jetty, JSON, XML, XSD, WSDL, SOA; AD, Exchange; SAP

mirsovetov.net

Андрощук Александр, ИТ решения, советы, заметки…

Oracle сколько места занимает схема

Проблема:

  • Как узнать сколько места занимает схема в Oracle.
  • Как определить сколько места занимают таблицы в определенной схеме в Oracle.
  • Как определить сколько места занимает таблица в Oracle.
  • Как определить сколько места занимают индексы в Oracle.
  • Как определить сколько места занимает индекс в определенной схеме в Oracle.

Инструментарий: Oracle 10, Oracle 11

Для определения сколько места занимает объект базы данных — можно воспользоваться представлением DBA_SEGMENTS или USER_SEGMENTS. Разница только в том что в USER_SEGMENTS возвращает описание лишь для текущего пользователя, а не для всей базы данных, и в нем отсутствует колонок: OWNER, HEADER_FILE, HEADER_BLOCK, or RELATIVE_FNO. В принципе можно воспользоваться и представлением DBA_SEGMENTS, только нужно указать OWNER’а, если конечно нужно узнать информацию о конкретной схеме.
Главный запрос от которого мы будим отталкиваться будет выглядеть следующим образом:

  • Определим сколько места занимают схемы, для этого выполним следующий запрос:

В результате получим список схем и размер схем:

OWNER SIZE_BYTES
SYS 2064187392
SCOTT 327680

Результаты как Вы видите в байтах, перепишем запрос для отображения количества занимаемого пространства схемами удобной для просмотра единице измерения:

OWNER SIZE_BYTES
SYS 1.921875 GB
SCOTT 320 KB

Запрос конечно не идеален, но все же позволяет узнать сколько занимает места схема в Oracle.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *