oracle 10g 排序优化,oracle 10g 优化

一. 优化要考虑的方面

1. 程序自身设计;

2. SQL语句优化:

1) 通过 v$librarycache 了解命中率,

这和下面提到的Shared Pool有关系,避免重复解析SQL语句,有助于提高数据库性能。

2) 使用 “物化视图” 提高查询性能。

3. 数据库优化;

4. 操作系统优化;

5. 硬件优化,这里涉及到的硬件主要有:硬盘,内存。

1)

硬盘的读写速度:建议增加硬盘的数量,从而增加每秒的并发操作。 2) 内存大小。

二. 数据库优化

1. 根据数据库的使用方式得出合理的优化策略

1) OLTP:连机事务处理。

需要实时处理大量请求,而每次处请求的数据量都是很小的。

OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

性能好坏的重要指标:响应时间与请求处理并发数。

2) OLAP:联机分析处理。

可以简单地理解为在海量数据中得出统计/综合信息,是数据仓库的主要应用。

做OLAP应用的数据库,数据量通常量非常大。

和OLTP不同,OLAP 应用的并发处理量是很低的,所以基本不用考虑并发问题。

而在处理数据量方面,OLAP每次操作所需要处理的数据量通常都是非常大的,这点也和OLTP相反。

性能好坏的重要指标:查询大量数据的速度。

注:由于OLTP和OLAP是两个不同应用方向,所以在优化数据库时应采取不同的优化策略。

2. 内存分配比例:2 : 1 : 1

内存分配的较佳方案:

1) SGA占50%的物理内存,

2) PGA 和 操作系统 各占25%的物理内存,

当然这也不是绝对的,

但是SGA占的物理内存不能超过75%,最多只能占70%,否则Oracle可能会出现各种的异常。

3. SGA中各个POOL的内存分配

1) Shared Pool:要分配多少内存不定,只要满足以下两个条件即可:

- Lib Cache的命中率 > 98%

- Data Dictionary Cache的命中率>85%

2) Large Pool:

- 专用服务器:100-200M

- 共享服务器:Session * (Sort_area_size + 2)

3) Java Pool:无需使用,一般不分配空间。

4) Redo Log Buffer Cache:小于5M,因为它的信息非常重要,应尽快把缓存数据写到文件中。

5) DB_Buffer_Cache:尽量大。

4. 在Oracle 10g中,

如果我们定义了SGA_MAX_SIZE后,

其实我们通过SGA_TARGET让Oracle自动调整SGA的内存分配。

5. Redo log files,Data

files,Archive log

files尽量放在不同的磁盘上,以均衡I/O。

特别是Redo Log files和Archive log files。

6.Undo Segment容量大小要符合实际应用,不能太小。

7.热点文件特殊处理

1) 分开存放 Index Segment 和 Data Segment。

2) 使用分区表。

8. 索引(Index)问题

1) 适当使用BTREE,BITMAP以及反向索引:不同索引适用于不同的表,设置索引之前要考虑这个问题。

2) 一个表的索引数最多不要超过5个,否则可能影响性能。

3) 定期重构索引。(单边树索引重构时可考虑使用反向索引降低索引树高度)

4) 注意索引是否失效,这一般是比较烂的SQL语句引起的问题。

9. 尽量减少 “全表扫描操作” &

“排序操作”

10. 看执行计划有助于各位DBA找出性能问题。

由于oracle10g简化了配置参数,而且提供自动根据数据库访问情况对各类缓存进行分析优化的功能,因此在oracle参数这层进行优化主要有以下几点。

PRE_PAGE_SGA

oracle实例启动时,会只载入各个内存区最小的大小。而其他SGA内存只作为虚拟内存分配,只有当进程touch到相应的页时,才会置换到物理内存中。但我们也许希望实例一启动后,所有SGA都分配到物理内存。这时就可以通过设置PRE_PAGE_SGA参数来达到目的了。

这个参数的默认值为FALSE,即不将全部SGA置入物理内存中。当设置为TRUE时,实例启动会将全部SGA置入物理内存中。它可以使实例启动达到它的最大性能状态,但是,启动时间也会更长(因为为了使所有SGA都置入物理内存中,oracle进程需要touch所有的SGA页)。

LOCK_SGA

为了保证SGA都被锁定在物理内存中,而不必页入/页出,可以通过参数LOCK_SGA来控制。这个参数默认值为FALSE,当指定为TRUE时,可以将全部SGA都锁定在物理内存中。当然,有些系统不支持内存锁定,这个参数也就无效了

SGA_TARGET /

SGA_MAX_SIZE

10G中不需要分别制定SGA的每个部分的大小,假设将SGA_TARGET设置为200M,表明SGA最大为200M

所有SGA组件如share pool,buffer cache,large pool,java

pool都需从其中分配,oracle会自动为各组件指定初始值,并在运行过程中动态的调整各组件的大小。

当使用SGA_TARGET时,若未设置SGA_MAX_SIZE 或设置小于SGA_TARGET

则SGA_MAX_SIZE等于SGA-TARGET.SGA_TARGET

是可动态调整的,其值不能大于SGA_MAX_SIZE

目前推荐的参数配置:

LOCK_SGA = TRUE

SGA_TARGET

>= 4G (在系统物理内存允许的情况下越大越好)

SGA_MAX_SIZE

>= 4G (在系统物理内存允许的情况下越大越好)

但是效率并没有什么提高,通过以下两个查询看,命中率分别为99.2%和98.8%,说明在oracle程序层的优化已经达到了较高的效率:

查询高速数据缓存命中率:

select sum(pins) "data access",sum(pins)-sum(reloads) "cache

hit",

(1-sum(reloads)/sum(pins)) * 100 "hit rate" from

v$librarycache

查询数据字典命中率:

select sum(gets) "dictionary access",sum(gets) - sum(getmisses)

"dictionary cache hit",

(1-sum(getmisses)/sum(gets)) * 100 "hit rate" from v$rowcache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值