Oracle11G新特性:分区表分区默认segment大小64k变为8M
2017-02-08在oracle11.2创建分区表,每个分区默认大小为8M,是由_partition_large_extents参数控制,可以算是11.2.0.2开始的一个新特性,为了减少extent数量,提高分区表性能,而设置的一个参数,默认为true,即分区表的每个extent为8M,和oracle10g相比,会导致同样的数据耗费更多的表空间。
1、为了避免类似情况,可以设置_partition_large_extents参数为false.
SQL> alter system set "_partition_large_extents"=false;
SQL> alter system set "_partition_large_extents"=false scope=spfile;
SQL> alter system set "_partition_large_extents"=false scope=both;
create pfile from spfile;
SQL> show parameter _partition_large_extents;
SQL>select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_segments where tablespace_name like 'TS%' group by TABLESPACE_NAME;
2、
alter system set deferred_segment_creation=true;
show parameter deferred_segment_creation
3、通过测试证明,设置_partition_large_extents参数确实是能够控制分区表的extent大小,而且对于分区表,deferred_segment_creation虽然为true,但是在一个分区表中如果有一个子分区插入了记录,那么其他子分区会同时创建segment.对于数据量不多,而且数据大量集中在某几个分区,那强烈建议设置_partition_large_extents为false,节约空间.
4、如果数据量较大,而且数据分布较为均匀,建议设置_partition_large_extents为true.另外对于分区的index也有同样的参数为_index_partition_large_extents
5、Oracle中segment extent block
一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。table中的数据,通过hash算法分布在tablespace中的各个datafile中,tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。
Segment(段)、extent(区、 block(块)都是Oracle存储的物理概念名称
BLOCK是Oracle存储的最基本单位,由DB_BLOCK_SIZE制定,通常为8KB,也可以定义为2KB,4KB,16KB,32KB,64KB等,磁盘最小存储单位是sector(512BYTE 操作系统概念),Oracle数据块由连续的sector组成,Oracle读写单位是数据块,应尽量设置BLOCK大小为磁盘数据块大小的整数倍,避免IO浪费
连续的数据块组成一个分区extent,便于空间管理,包括空间的分配和释放。段的空间是以区为单位分配的。提高了分配空间的效率,但是带来了空间碎片。
Oracle每个表或索引都会对应这一个段。如果使用分区表或者分区索引,每个分区(partition)都对应着一个段。每个段都有名字,即对象(表、索引)的名字,段由extent组成,但不要求连续。
一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概 念,segment可以看成是这个逻辑概念的物理实现;segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;extent由多个连续的blocks组成,不可以跨数据文件;block由1-多个os块组成,是oracle i/o的最小存储单位。
deferred_segment_creation在11.2.0.4版本的Oracle数据库新增参数,默认是true。
这会导致在exp时,没有segment的对象不会导出。
create table table_name segment creation immediate;
alter table table_name allocate extent来使其创建出分配空间,
6、查看分区表空间大小:
select segment_name, sum(bytes)/1024/1024 from User_Extents where segment_name in (select distinct table_name from user_tab_partitions) group by segment_name;
空置率
select a.tablespace_name,a.free_space,b.total_space,a.free_space/b.total_spacefree_ratio from (select tablespace_name,sum(bytes)/1024/1024 free_space from dba_free_space group by tablespace_name) a,(select tablespace_name,sum(bytes)/1024/1024 total_space from dba_data_files group by tablespace_name) b where a.tablespace_name=b.tablespace_name order by free_ratio desc
相关日志
- rman-0level全备份及恢复
- nagios监测dbbak
- oracle限制远程访问
- 给left join关联关系字段加索引
- Oracle ASM
- Oracle Database 18c
- DG两个数据库SID不同
- DG-Dgmgrl
- Oracle中的BLOB和CLOB
- oracle 启动错误:MEMORY_TARGET not supported on this system
- create bigfile tablespace
- oracle增加md5函数
- oracle删除重复行delete repeat
- rollback回滚 (1)
- oracle中drop一个表,让数据文件释放空间
- CentOS 5.11 x64静默安装(slient install)oracle 11.2.0.4 x64
- sqlplus USER/PWD@IP:PORT/SID
- oracle删除所有表
- oracle查询长整数实例
- oracle设置NLS_DATE_FORMAT参数实例
- ORA-00600和ORA-08103错误(oracle10g)
- oracle user passwd用户密码
- oracle导入txt数据文件实例
- conn user as sysdba
- SGA/PGA的设置与调整 (9)
- ORA-01843: not a valid month (3)
- oracle表空间(tablespace)的增删改查(create/drop/rename,move/select) (2)
- rlwrap实现sqlplus使用上下键查历史命令