oracle 区(extent)

概述

又称范围,是一组表空间内连续分配的相临数据块
是数据库分配disk空间的最小逻辑单位,也是表中数据增长的基本单位
一个oracle对象包含至少一个数据区

区的storage分配参数

initial:段建立时被分配的第一个区(第一块空间)的大小
next:段被分配的第二个区的大小
minextents:段被分配的区个数下限
maxextents:段被分配的区个数上限
pct-increase:从第3个分区开始,段被分配的新区比前一个分配的分区扩大到百分比
uniform管理方式下,表空间的extent分配原则是:initial,next值固定为uniform指定值,min,max,pct参数自动设置默认值(分别为1,2^31,0);表空间中新建表时,extent分配情况按表空间所定参数进行,并以固定不变的uniform值进行extent扩充,而建表时指定上述各项storage参数无效(注意initial_extent)。
SQL> create tablespace tb1 datafile 'tb1.dbf' size 100M uniform size 1500k;

建表空间指定uniform分区大小

SQL>

SUBSTR(TABLESPAC INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE


TB115400961540096121474836450

查表空间分配情况

SQL> select substr(table_name,1,8),initial_extent,next_extent,min_extents,max_

extents,pct_increase from dba_tables where table_name='T1';

SUBSTR(TABLE_NAM INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE


T12539521540096121474836450

查表分区参数,可见所有指定参数均失效(注意initial_extent)

SQL> select extent_id,substr(segment_name,1,8),tablespace_name,bytes

from dba_extents where segment_name='T1';

EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAMEBYTES


0T1TB11540096

SQL> select extent_id,substr(segment_name,1,8),tablespace_name,bytes

from dba_extents where segment_name='T1';

查询指定表的实际分区情况,可见首个分区分配为uniform指定值

SQL> insert into t1 select * from dba_objects;

SQL> select extent_id,substr(segment_name,1,8),tablespace_name,bytes

from dba_extents where segment_name='T1';

EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAMEBYTES


0T1TB11540096

1T1TB11540096

2T1TB11540096

3T1TB11540096

扩充表后再用上一条命令表达实际分区情况,可见扩充分区分配也均为uniform

autoallocate管理方式下,表空间的extent分配原则是:initial,min,max自动取默认值(64k,1,2^31),next,pct参数无效;表空间中新建表时,extent分配情况按表空间所定参数进行,并以下规则进行extent扩充,而建表是指定上述各项storge参数无效。

·next,pct参数无效,所有空间分配按64k 的整数倍大小进行分配;

·第1-15个分区,每个分区大小64k,合计1M;

·第16-79个分区,每个分区大小1M,合计63M,以上两项大小合计64M;

·第80-199个分区,每个分区大小8M,合计960M,以上三项合计1G;

·第200个分区以上,每个分区大小是64M;

oracle10.2.0.2分区分配规则:

·第0-127个分区,每个分区大小8M,合计1G;

·第128个分区以上,每个64M。

SQL> create tablespace tb2 datafile 'tb2.dbf' size 100M;

建表空间默认使用autoallocate管理方式

SQL> select substr(tablespace_name,1,8),initial_extent,next_extent,min_extents,

max_extents,pct_increase from dba_tablespaces;

SUBSTR(TABLESPAC INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE


TB26553612147483645

查表空间分区分配情况

SQL> create table t2 tablespace tb2 storage (initial 50k next 80k minextents 3 maxextents 9 pctincrease 40) as select * from dba_objects where 1=2;

SQL> select substr(table_name,1,8),initial_extent,next_extent,min_extents,

max_extents,pct_increase from dba_tables where table_name='T2';

SUBSTR(TABLE_NAM INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE


查看表空间使用率

--查看表空间使用率(包含临时表空间)
select * from (
Select a.tablespace_name,
(a.bytes- b.bytes) "表空间使用大小(BYTE)",
a.bytes/(1024*1024*1024) "表空间大小(GB)",
b.bytes/(1024*1024*1024) "表空间剩余大小(GB)",
(a.bytes- b.bytes)/(1024*1024*1024) "表空间使用大小(GB)",
to_char((1 - b.bytes/a.bytes)*100,'99.99999') || '%' "使用率"
from (select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select c.tablespace_name,
d.bytes_used "表空间使用大小(BYTE)",
c.bytes/(1024*1024*1024) "表空间大小(GB)",
(c.bytes-d.bytes_used)/(1024*1024*1024) "表空间剩余大小(GB)",
d.bytes_used/(1024*1024*1024) "表空间使用大小(GB)",
to_char(d.bytes_used*100/c.bytes,'99.99999') || '%' "使用率"
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name
)
order by tablespace_name

你可能感兴趣的:(oracle 区(extent))