简单分析Oracle的数据存储(2)

那么这些数据类型的数据占用的空间是否是按照最大字节208来存储的呢,换句话说就是表里存放着一条记录,可能长度只有number(2),但是是否会依旧占用22个字节来存储呢。
 我们随机抽取一个数据块来简单的测试一下。
 可以看到如下两条记录是从0开始计数的,都在12803这个数据块中。
select dbms_rowid.ROWID_OBJECT(rowid) object_id,
 dbms_rowid.ROWID_RELATIVE_FNO(rowid) file_no,
 dbms_rowid.rowid_row_number(rowid) row_no,
 dbms_rowid.rowid_block_number(rowid) blk_number
 from data  where rownum<3;
      OBJECT_ID    FILE_NO    ROW_NO BLK_NUMBER
 ---------- ---------- ---------- ----------
      18993        11          0      12803
      18993        11          1      12803

我们来进一步查看12803这个数据块中含有哪些记录。不考虑数据块的其他存储参数。按照默认的值来看。
 里面含有约148条记录。

OBJECT_ID    FILE_NO    ROW_NO BLK_NUMBER
 ---------- ---------- ---------- ----------
。。。。。。
    18993        11        143      12803
      18993        11        144      12803
      18993        11        145      12803
      18993        11        146      12803
      18993        11        147      12803

148 rows selected.

可以得到每条记录的平均大小就是55字节。
SQL> select 1024*8/148 from dual;

1024*8/148
 ----------
 55.3513514

另外需要注意的是,这个rownum,block number可以给予不同的数据文件有不同的含义。
 同样一个表中的记录在数据文件5中是数据块12676,在7号数据文件是也含有数据块为12767的。而且对应的数据行数也是重新从0开始计算。
 OBJECT_ID    FILE_NO    ROW_NO BLK_NUMBER
 ---------- ---------- ---------- ----------
      18993          5        143      12676
      18993          5        144      12676
      18993          5        145      12676
      18993          5        146      12676
      18993          5        147      12676
      18993          5        148      12676
    18993          7          0      12676
      18993          7          1      12676
      18993          7          2      12676
      18993          7          3      12676
      18993          7          4      12676

从上面的小测试可以简单得出:
 数据类型的存储是有一定的收缩性的,比如数据类型为number(22),最大支持22位,但是它实际存储的时候会按照实际的存储数据进行分配
 另外一个数据段可以存储在多个数据文件中,数据块号为12676在不同的数据文件中有不同的含义,对应的row_number也有不同的意义。
 我们可以从user_extents中查看对应的区段信息,可以从dba_extents中得到更多的信息,但是更深入的分析,可以借助rowid来查看,在情况允许的时候,甚至可以导出对应的数据块dump来做底层的分析。

CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d7f4fd156c9813ca9f7f4c3f9974a1c8.html