ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle数据库设置

oracle数据库设置

原创 Linux操作系统 作者:sxitsxit 时间:2013-05-28 18:25:46 0 删除 编辑
数据库设计方面:
1:数据库块大小选择(db_block_size)
默认是8k,块越大,装的行记录就越多,所需的块就越少,读取记录产生的io就越少
OLAP(数据仓库)特点是一般用户不多,并发不大,查询方式最多是使用全表扫描,返回大量的数据,
OLTP 特点是用户很多,并发很大,查询方式最多是使用索引,返回极少的数据
因此OLAP中block尽量大,块设置越大性能越会有提升
oltp系统倾向于索引读返回少量记录,块的大小对性能影响不大。如果块设置太大,容易导致
大量并发查询及更新操作都指向同一个数据块,从而产生热块

2:创建数据文件时extent的扩展
对oracle来说,表空间扩展是要格式化操作系统文件成为oracle可以识别的数据库文件,需要很大开销
因此在创建表空间时,一般会多预先分配大点的空间

3:表的pctfree设置
pctfree控制着block块中的free空间,可以根据数据库对表更新的频繁程度,对表的pctfree做设置,免得产生行迁移,影响性能
pctfree设置大一些,可避免行迁移
alter table xx pctfree 20
其实消除行迁移的一个简单方法,就是数据重建

 
 
分区表的一些基础
 
 
分区表
三种类型:范围分区、列表分区、hash分区、组合分区
范围分区使用最广,列表分区次之
不同分区,在不同segment中,可以将分区指定到不同的表空间里
1:范围分区
最常见的是按时间列进行分区
create table xxx(id number,deal_date date,area_code number)
partition by range(deal_date)
(
 partition p1 values less tha(to_date('2012-02-01','YYYY-MM-DD')),
 ...................
 partition p11 values less tha(to_date('2012-12-01','YYYY-MM-DD')),
 partition p12 values less tha(to_date('2013-01-01','YYYY-MM-DD')),
 partition p_max values less tha(maxvalue)
 );
 
 
2:列表分区
 
最常见的是按地区列进行分区
create table xxx(id number,deal_time date,area_code number)
partition by list(area_code)
(
 partition p51 values(51),
 partition p52 values(52),
 ..................
 partition p59 values(59),
 partition p_other values(default)
 );
 
 
 
 
 分区表的原理
 
 将一个大的对象分成了多个小对象
 
 
 分区表作用
 
 1:分区消除,将大对象划分为更小的对象
 
 2:分区truncate更快捷
 
    很多历史表、日志表都被设计为分区表,正是由于这个特性使得清理数据极其方便
   
 3: 分区数据转移备份
 
    可以将分区表的某个分区数据通过分区交换的方式交换出来备份
    普通表和分区表的字段必须完全一样
   
    将分区表t_range的p8分区的数据备份到普通表t_normal中
    alter table t_range exchange partition p8 with table t_normal
    然后可以看到p8分区的数据不见了,直接跑到t_normal表里了
   
 4:分区切割(split)
 
 5: 分区合并
 
 
 
 分区索引
 
 1:全局索引
   
   可以理解为普通索引,整个分区的一个大索引
   create index idx_range_date on t_range(deal_date);
 
 2:局部索引
 
   其实就是针对各分区所建的索引
   create index idx_range_areacode on t_range(area_code) local
  
  
   select index_name,status from user_indexes where index_name in('IDX_RANGE_DATE','IDX_RANGE_AREACODE')
  
   查询出status状态为N/A的表示局部索引,需要到user_ind_partitions中分析索引状态
  
   select index_name,partition_name,status from user_ind_partitions where index_name='IDX_RANGE_AREACODE'
  
 
 分区索引失效 
  
  1: 一般在对分区表的分区操作时,对局部索引一般都没有影响,但是对全局索引影响比较大,一般都会重建全局索引
   alter index idx_range_date rebuild
  
   也可以在执行分区操作时直接加update global indexes参数,如:
  
   alter table t_range truncate partition p2 update global indexes
  
  2:有索引效率更低
 
     很有可能是遍历了整个分区表
 
  3:无法应用分区条件
    
        
  
  
   
      
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24862808/viewspace-762265/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-04-14

  • 博文量
    98
  • 访问量
    323763