动态参数log_buffer= 3 M
Other memory
动态参数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工具格式化后阅览。
altersessionsetevents'10046tracenamecontextforever,level12'; altersessionsetevents'10046tracenamecontextoff';
SELECTp.spid,s.usernameFROMv$sessions,v$processpWHEREs.audsid=USERENV('sessionid')ANDs.paddr=p.addr;3、表分区
在网管数据库里,比较突出的大表有小区表和告警表。
性能表,使用范围分区。
告警表,使用range-hash的混合分区和范围分区。
范围分区以时间点starttime为分区字段,混合分区增加ALARMNUMBER为字段的hash子分区。
同时,创建本地分区索引。
4、Procedure优化
1)取消地市一级的Procedure,只保留其上层调用Procedure,并保持参数输入方法,调用方法不变。
2)确保大表数据查询操作只有1次,确保大表数据删除只有一次。
3)确保单条SQL语句执行已优化。
4)减少SQL执行次数。
5、其他改造
修改表存储参数,提前预先分配extents。
修改表空间存储参数(采集表空间所用块设置为大块,比如32k一个块;修改ptcfree,pctused,pctincrease等)。
避免使用唯一索引和非空约束。
创建合理的索引。
各模块SQL语句优化,比如使用提示固定索引等。
确认每一条历史数据删除语句已优化和删除方法。
临时表的使用。
6、维护作业计划
表分析(包含确定具体的表的分析方法,分区表分析方法,索引分析方法)。
空间回收维护(包括确定HWM,回收多余分配给表的块,合并数据块碎片等)。
索引维护(包括定期重建索引,索引使用情况监视等)。
历史数据删除检查(检查保存的数据是否符合要求,检查历史数据删除方法是否正确-比如批量删除提交的方法等)。
全库性能分析和问题报告及优化(比如使用statspack进行性能趋势分析,检查有问题的SQL或事务,确定当前系统等待的top 5事件等等)。
表数据keep,default及reclye(比如把一些常用的配置表固定在内存里等)。
数据库参数核查(防止数据库参数被修改,定期对系统配置参数进行比较)。
日志文件分析(定期检查Oracle生成的日志文件,定期备份、删除)。
硬盘空间维护(定期对Oracle 对象使用的空间情况进行监视)。
四,Oracle数据库优化前后比较
1、批量重复的SQL语句执行性能
根据网元数量,各地的执行的完成时间有所区别。
用于数据合并和汇总的Procedure的计算性能
通过statspack的周期性采集数据,我们可以使用以下语句,计算我们想统计的Procedure的执行情况:
SELECTTO_CHAR(sn.snap_time,'yyyy-mm-ddhh24:mi:ss')ASsnap_time,s.disk_reads, s.buffer_gets,s.elapsed_time/1000000ASelapsedtime
FROM(SELECThash_value,sql_text,address,last_snap_id
FROMSTATS$SQLTEXTWHEREpiece=0ANDsql_textLIKE'%&sqltext_key%')t, (SELECTaddress,hash_value,snap_id,sql_text,disk_reads,executions, buffer_gets,rows_processed,elapsed_time
FROMSTATS$SQL_SUMMARY)s,STATS$SNAPSHOTsn WHEREs.hash_value=t.hash_value ANDs.address=t.address ANDs.snap_id=t.last_snap_id ANDsn.snap_id=s.snap_id;比如,我们以perfstat用户执行该SQL,输入“to_comp”,可以观察到数据库里保存的有的to_comp存储过程的执行时间,我们发现,其执行时间,从优化前的几千秒,最后稳定在优化后的几十秒。
注:to_comp是整体调用执行一次所有网元的数据合并和汇总的procedure。
用于小区分析数据的Procedure的计算性能
使用上面的方法,我们一样可以知道,小区分析的procedure执行,从优化前的约几千秒,最后稳定在优化后的几十秒。
批量数据采集入库性能
使用bcp,能从以前约15分钟,减少到约4分钟。
2、一些单次、不常用的操作的语句执行性能
GUI上的性能数据查询,告警数据查询,响应时间都极快,几乎不再出现长时间等待响应的情况。
五,参考
常用的优化工具
statspack
sql*plus
ORACLE数据库优化方案
www.chinaqking.com 期刊门户-中国期刊网2008-12-11来源:《中小企业管理与科技》供稿文/黄丽莉
[导读]摘要:本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。从多个角度出发,对Oracle优化中的很多关键问题进行了深入全面的探讨,从内存优化、IO规划及优化到SQL优化调整,以较为完整的体系阐述了Oracle的优化技术,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,具有很强的实战性和可操作性。
摘要:本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。从多个角度出发,对Oracle优化中的很多关键问题进行了深入全面的探讨,从内存优化、IO规划及优化到SQL优化调整,以较为完整的体系阐述了Oracle的优化技术,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,具有很强的实战性和可操作性。
关键词:ORACLE数据库 环境调整 优化设计 方案 前言
对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLE RDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不同方面介绍ORACLE数据库优化设计方案。 一、数据库优化自由结构OFA(Optimal flexible Architecture)
数据库的逻辑配置对数据库性能有很大的影响,优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。 数据库逻辑设计的结果应当符合下面的准则:(1)把以同样方式使用的段类型存储在一起;(2)按照标准使用来设计系统;(3)存在用于例外的分离区域;(4)最小化表空间冲突;(5)将数据字典分离。
二、充分利用系统全局区域SGA(SYSTEM GLOBAL AREA)
SGA是oracle数据库的心脏。用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据,以实现加速的目的。正确的SGA大小对数据库的性能至关重要。SGA包括以下几个部分:
1、数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小的1%-2%,用来存储从数据库重读取的数据块(表、索引、簇等),因此采用least recently used (LRU,最近最少使用)的方法进行空间管理。
2、字典缓冲区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表说明和权限,它也采用LRU方式管理。
3、重做日志缓冲区。该缓冲区保存为数据库恢复过程中用于前滚操作。
4、SQL共享池。保存执行计划和运行数据库的SQL语句的语法分析树。也采用LRU算法管理。如果设置过小,语句将被连续不断地再装入到库缓存,影响系统性能。 三、规范与反规范设计数据库