详解Oracle数据库优化方案与实践(二)

2014-11-24 12:55:30 · 作者: · 浏览: 1
QL语句的执行次数。
每条SQL语句执行,都会消费系统资源,都有执行时间。减少不必要的SQL语句执行和减少SQL语句的执行次数,自然能减少业务执行时间。需要根据业务流程,重新设计数据处理的代码。此方法主要适用于procedure执行的数据合并、汇总。
2) 这些SQL语句,由于每个SQL语句都要执行很多次,应该尽量让该SQL的散列值在shared pool内存块中存在。也就是使用动态SQL,避免SQL硬解析。
可通过Oracle参数的设置,和动态SQL语句的应用,通过绑定变量的方式,减少SQL语句的解析次数。
3)减少大表的操作,确保在一次事务中,同类操作只对大表执行一次。主要在数据合并和数据汇总的pprocedure和数据采集时出现
三、Oracle数据库优化方案
1、内存等Oracle系统参数配置
www.2cto.com
Oracle 的parameter参数,分动态参数和静态参数,静态参数需要重新启动数据库才能生效,动态参数不需要重新启动数据库即可生效。
Oracle 9i可以使用spfile的特性,使用alter system set 参数名=参数值 scope=both[spfile];的方法进行修改。也可以直接修改pfile。
以下给出了网管Oracle 数据库重点关注的parameter的初始优化设置。
最大可使用的内存SGA总和
静态参数sga_max_size=物理内存的大小减1.5G
Shared pool
动态参数shared_pool_size= 600 ~ 800 M
静态参数shared_pool_reserved_size= 300 M
动态参数open_cursors= 400 ~ 600
静态参数cursor_space_for_time= TRUE
静态参数session_cached_cursors= 60 ~ 100
动态参数cursor_sharing= SIMILAR
Data buffer
动态参数db_cache_advice= READY
动态参数db_cache_size
动态参数Db_keep_cache_size
动态参数db_recycle_cache_size
(sga_max_size大小,除了分配给所有非data buffer的size,都分配给data buffer)
Sga other memory
动态参数large_pool_size= 50 M
静态参数java_pool_size= 100 M
动态参数log_buffer= 3 M
Other memory
www.2cto.com
动态参数sort_area_size= 3 M
静态参数sort_area_retained_size= 0.5 M
静态参数pga_aggregate_target= 800 M
动态参数workarea_size_policy= AUTO
磁盘I/O配置
静态参数sql_trace= FALSE
动态参数timed_statistics= true
动态参数db_file_multiblock_read_count= 16
静态参数dbwr_io_slaves= 0
静态参数db_writer_processes= 3
静态参数undo_management= AUTO
动态参数undo_retention= 7200
2、使用索引
我们初步定义,表数据超过1000行的表,我们都要求使用索引。(不区分事务操作的数据在表数据中所占的比例)
索引所包含的字段不超过4个。
检查SQL语句是否使用了索引,我们使用execute plan来看,获得explain的方法,我们通过SQL*PLUS工具,使用如下命令进行查看:
setautotraceonsetautotracetraceonlyexplain settimingon或通过SQL*PLUS trace,然后查看user_dump_dest下的跟踪文件,使用tkprof工具格式化后阅览。
www.2cto.com
altersessionsetevents'10046tracenamecontextforever,level12'; altersessionsetevents'10046tracenamecontextoff'; SELECTp.spid,s.usernameFROMv$sessions,v$processpWHEREs.audsid=USERENV('sessionid')ANDs.paddr=p.addr;3、表分区
在网管数据库里,比较突出的大表有小区表和告警表。
性能表,使用范围分区。
以时间点start_time为范围分区字段。
告警表,使用range-hash的混合分区和范围分区。
范围分区以时间点starttime为分区字段,混合分区增加ALARMNUMBER为字段的hash子分区。
同时,创建本地分区索引。
4、Procedure优化
1)取消地市一级的Procedure,只保留其上层调用Procedure,并保持参数输入方法,调用方法不变。
2)确保大表数据查询操作只有1次,确保大表数据删除只有一次。
3)确保单条SQL语句执行已优化。
4)减少SQL执行次数。
5、其他改造
修改表存储参数,提前预先分配extents。
修改表空间存储参数(采集表空间所用块设置为大块,比如32k一个块;修改ptcfree,pctused,pctincrease等)。
避免使用唯一索引和非空约束。
创建合理的索引。
各模块SQL语句优化,比如使用提示固定索引等。
确认每一条历史数据删除语句已优化和删除方法。
临时表的使用。
www.2cto.com
6、维护作业计划
表分析(包含确定具体的表的分析方法,分区表分析方法,索引分析方法)。
空间回收维护(包括确定HWM,回收多余分配给表的块,合并数据块碎片等)。
索引维护(包括定期重建索引,索引使用情况监视等)。
历史数据删除检查(检查保存的数据是否符合要求,检查历史数据删除方法是否正确-比如批量删除提交的方法等)。
全库性能分析和问题报告及优化(比如使用statspack进行性能趋势分析,检查有问题的SQL或事务,确定当前系统等待的top 5事件等等)。
表数据kee