最近Oracle数据库升级到11G之后,出现一些问题,慢慢的开始发现一些需要总结的东西,每次心里都在想:下次,我自己搭建数据仓库的
最近Oracle数据库升级到11G之后,出现一些问题,慢慢的开始发现一些需要总结的东西,每次心里都在想:下次,我自己搭建数据仓库的时候,一定要注意这些细节,在仓库的创建初期就做好这些工作。
1、redo log的设计
1)如果可以单独放,redo和数据文件单独划组做条带化等。物理上分开。
2)redolog如果可以单独放,就不要设置得太大,最多500M一个,因为日志太大,可能会导致实例恢复的时间很长。另外在极端倒霉的情况下,如果再数据恢复过程中,实例再次down掉,比如掉电。那你就惨了。总之,那么多数据放在日志里不安全,放在datafile里放心一些。
3)如果你和我一样悲催,redo和datafile所在磁盘组都在一个,因为存储底层直接划分的一个大池子(基于成本、速度的综合考虑),那你就把日志调大一些(目前我的是2G/个),组数增加一些(目前我的20组),如果还是出现日志不够用,那就多增加组数,比如30组。另外ASM在这种大池子面前,基本无法提高IO了,因为你无法解决redo和datafile竞争IO的问题。
2.undo策略
1)undo_retention的设计
一般可以直接设置3小时,先保证系统可用。当然undo表空间要足够大。
好吧,如果你说无法定量,我给你一个参考值。
数据量3T的数据库,设置undo表空间为300G,undo_retention时间为10800,默认单位是秒,也就是3小时。
2)guarantee参数的取舍
我觉得,如果你未充分了解你的业务系统和数据库状况之前,不要轻易启用这个参数。有可能会导致异常灾难。
上述条件不成立的,可以尝试使用该参数,,以防止ORA-01555的出现。
3、DB和OS级别都要记得开启异步IO
参考: 和
4、其他的,等想到了再加上来吧
5、OLTP和DSS不同数据库设计
oltp 数据库 dss 数据库
oltp = online transaction processing dss = data warehousing
联机事物处理 数据仓库
例如:飞机订票,网上交易,bbs等 例如:各种资源资料查询系统
大量的在线用户和dml操作 很少的dml操作
大量基于索引的查询 大量的全表扫描的查询
用b-tree,reverse key索引,定期索引重建 用bitmap索引
需要较多的小的回退段 需要较少的大的回退段
不要用分布式查询 用分布式查询
数据对象的存储参数pctfree 20 或者更高 数据对象的存储参数pctfree 0
共享程序代码和各种变量常量 字符变量和线索
启动多线索服务 使用大的数据块,db_file_mutiblock_read_count
使用较大的日志文件 使用较小的日志文件
listener开多个响应端口 增加sort_area_size