Похоже, вы пытаетесь ответить на коллекцию. Для этого вам нужно настроить сериализатор (или получить данные в виде массива).
Посмотрите на страницы этого документа: http://symfony.com/doc/current/components/http_foundation/introduction.html#creating-a-json-response
и
Зависит, что Вы подразумеваете "под размером таблицы". Таблица не касается определенного файла в файловой системе. Таблица будет находиться на табличной области (возможно несколько табличных областей, если она будет разделена, и возможно несколько табличных областей, если Вы также хотите принять во внимание индексы на таблице). Табличная область будет часто иметь несколько таблиц в ней и может быть распространена через несколько файлов.
, Если Вы оцениваете, в каком количестве пространства Вы будете нуждаться для будущего роста таблицы, затем avg_row_len умноженный на количество строк в таблице (или количество строк Вы ожидаете в таблице) будет хорошее руководство. Но Oracle оставит некоторое пространство свободным на каждом блоке, частично чтобы позволить, чтобы строки 'выросли', если они будут обновлены, частично потому что не может быть возможно соответствовать другой всей строке на том блоке (например, 8K блок только соответствовал бы 2 строкам 3K, хотя это будет экстремальным примером, поскольку 3K намного больше, чем большинство размеров строки). Таким образом, БЛОКИ (в USER_TABLES) могли бы быть лучшим руководством.
, Но если бы у Вас было 200 000 строк в таблице, удалил половину из них, затем таблица все еще 'владела' бы тем же количеством блоков. Это не выпускает их для других таблиц для использования. Кроме того, блоки не добавляются к таблице индивидуально, но в группах, названных 'степенью'. Таким образом, там обычно будут EMPTY_BLOCKS (также в USER_TABLES) в таблице.
Вы могли бы интересоваться этим запросом. Это говорит Вам, сколько места выделено для каждой таблицы, принимающей во внимание индексы и любые СВЕЧИ на таблице. Часто Вам интересно знать, "Сколько пробелов таблица Purchase Order берет, включая любые индексы", а не просто саму таблицу. Можно всегда копаться в деталях. Обратите внимание, что это требует доступа к представлениям DBA_*.
COLUMN TABLE_NAME FORMAT A32
COLUMN OBJECT_NAME FORMAT A32
COLUMN OWNER FORMAT A10
SELECT
owner,
table_name,
TRUNC(sum(bytes)/1024/1024) Meg,
ROUND( ratio_to_report( sum(bytes) ) over () * 100) Percent
FROM
(SELECT segment_name table_name, owner, bytes
FROM dba_segments
WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
UNION ALL
SELECT i.table_name, i.owner, s.bytes
FROM dba_indexes i, dba_segments s
WHERE s.segment_name = i.index_name
AND s.owner = i.owner
AND s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.segment_name
AND s.owner = l.owner
AND s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION')
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.index_name
AND s.owner = l.owner
AND s.segment_type = 'LOBINDEX')
WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10 /* Ignore really small tables */
ORDER BY SUM(bytes) desc
;
Во-первых, соберите статистику оптимизатора на таблице (если Вы уже не имеете):
begin
dbms_stats.gather_table_stats('MYSCHEMA','MYTABLE');
end;
/
ПРЕДУПРЕЖДЕНИЕ: Поскольку Justin говорит в своем ответе, заключая, что статистика оптимизатора влияет на оптимизацию запросов и не должна быть сделана без должного ухода и соображения !
Затем находят количество блоков занятым таблицей из сгенерированной статистики:
select blocks, empty_blocks, num_freelist_blocks
from all_tables
where owner = 'MYSCHEMA'
and table_name = 'MYTABLE';
общее количество блоков, выделенных таблице, является блоками + empty_blocks + num_freelist_blocks.
блоки являются количеством блоков, которые на самом деле содержат данные.
Умножают количество блоков используемым размером блока (обычно 8 КБ) для использования пространства - например, 17 блоков x 8 КБ = 136 КБ.
, Чтобы сделать это для всех таблиц в схеме сразу:
begin
dbms_stats.gather_schema_stats ('MYSCHEMA');
end;
/
select table_name, blocks, empty_blocks, num_freelist_blocks
from user_tables;
Примечание: Изменения, внесенные в вышеупомянутое после чтения этот поток AskTom
Прежде всего я обычно предостерегал бы, что, собирая статистику таблицы, чтобы сделать, анализ пространства является потенциально опасной вещью сделать. Сбор статистики может изменить планы запросов, особенно если DBA настроил сборочное задание статистики, которое использует параметры не по умолчанию, которые Ваш вызов не использует и заставит Oracle повторно анализировать запросы, которые используют рассматриваемую таблицу, которая может быть хитом производительности. Если DBA намеренно встал из-за некоторых столов без статистики (распространенный, если Ваш OPTIMIZER_MODE
, ВЫБИРАЮТ), заключая, что статистика может заставить Oracle прекращать использовать основанный на правилах оптимизатор и начинать использовать оптимизатор на основе издержек для ряда запросов, которые могут быть сильной головной болью производительности, если это неожиданно сделано в производстве. Если Ваши статистические данные точны, можно запросить USER_TABLES
(или ALL_TABLES
или DBA_TABLES
) непосредственно, не звоня GATHER_TABLE_STATS
. Если Ваши статистические данные не точны, существует, вероятно, причина этого, и Вы не хотите нарушать статус-кво.
sp_spaceused
является вероятная Oracle DBMS_SPACE
пакет. У Tom Kyte есть хорошее show_space
процедура , которая предоставляет простой интерфейс этому пакету и распечатывает информацию, подобную тому, что sp_spaceused
распечатывает.
IIRC таблицы, в которых Вы нуждаетесь, являются DBA_TABLES, DBA_EXTENTS или DBA_SEGMENTS и DBA_DATA_FILES. Существует также USER_ и версии ALL_ их для таблиц, которые Вы видите, нет ли у Вас полномочий администрирования на машине.
Простой выбор, который возвращает исходные размеры таблиц на основе размера блока, также включает размер с индексом
select table_name, (nvl (( выбрать сумму (блоки) из dba_indexes a, dba_segments b где a.index_name = b.segment_name и a.table_name = dba_tables.table_name ), 0) + блоки) * 8192/1024 TotalSize, блоки * 8 tableSize из dba_tables заказать по 3