Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 размер таблицы (настоящий)  [new]
nxx
Member

Откуда:
Сообщений: 2000
хочу узнать размер таблицы

+

create table xtest
as
select rownum as rn
from dual
connect by rownum < 10000



пробую....

select bytes
from  dba_segments 
where segment_name = 'XTEST';


bytes 262144

select blocks/*20*/ *(select value from v$parameter where name = 'db_block_size') /*8192*/ as bytes
from all_tables t
where table_name = 'XTEST'


bytes 163840

а если еще посмотреть план для

select *
from XTEST

то показывает bytes 39996

кому верить ?
сколько реально читается при запросе и сколько используется в explain plan

то что место выделяется большими кусками мне понятно
непонятно, откуда берется 39996
5 окт 18, 11:51    [21696176]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
-2-
Member

Откуда:
Сообщений: 13858
nxx,

объем корзинки
объем яиц в корзинке
объем яичницы
5 окт 18, 12:20    [21696238]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28295
RTFM Logical Storage Structures (FAQ)
5 окт 18, 12:21    [21696242]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5146
nxx
непонятно, откуда берется 39996
Во-первых, если хочется предельной точности надо собирать статистику с estimate_percent=>100.

Далее, в segments 24 блока (3 экстента), а в tables - 20 = 24 - заголовок сегмента - 3 * заголовок экстента.
То есть, tables показывает "Number of used data blocks in the table", а segments - все. (это можно прочитать в описании представлений словаря)

39996 = num_rows * avg_row_len.
5 окт 18, 13:30    [21696340]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
nxx
Member

Откуда:
Сообщений: 2000
всё-таки мне кажется разница слишком большая
75% накладных расходов и 25% данных ?
5 окт 18, 13:36    [21696344]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5146
nxx,

Расуждения могут несколько отличаться в записимости от automatic/manual segment space management.
Я говорил про auto.
5 окт 18, 13:38    [21696346]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
nxx
Member

Откуда:
Сообщений: 2000
dbms_photoshop
nxx,

Расуждения могут несколько отличаться в записимости от automatic/manual segment space management.
Я говорил про auto.


а как это посмотреть ? (база не моя)
5 окт 18, 13:42    [21696353]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5146
nxx
всё-таки мне кажется разница слишком большая
75% накладных расходов и 25% данных ?
Все еще хуже. При построении плана берется средняя длина, что может давать заметное отличие от суммы фактических.
SQL> select sum(vsize(rn)) x from xtest;

         X
----------
     29799
То есть
SQL> create table xtest as select rownum as rn from dual connect by rownum < 10000;

Table created.

SQL> select (select sum(vsize(rn)) from xtest) / (select blocks * 8192 from user_segments where segment_name = 'XTEST') ratio from dual;

     RATIO
----------
.151565552
Сделай дамп блоков, посмотри что там за беспредел.

Но бывает все не так плохо
SQL> create table xtest pctfree 0 as select lpad('x',1080,'x') rn from dual connect by rownum <= 10000;

Table created.

SQL> select (select sum(vsize(rn)) from xtest) / (select blocks * 8192 from user_segments where segment_name = 'XTEST') ratio from dual;

     RATIO
----------
.858306885

nxx
а как это посмотреть ? (база не моя)
Я верю ты в состоянии скопировать незнакомые слова к гугл.
5 окт 18, 14:19    [21696404]     Ответить | Цитировать Сообщить модератору
 Re: размер таблицы (настоящий)  [new]
-2-
Member

Откуда:
Сообщений: 13858
dbms_photoshop
... средняя длина, что может давать заметное отличие от суммы ...
Ага. Приблизительно в произведение на количество строк. Под (avg_)row_len может пониматься суммарная длина значений с "разделителем" в один байт к каждому полю.
5 окт 18, 14:34    [21696421]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить