汇•金融文案
银企汇的客户中,当前使用Oracle数据库的占比较大。本文主要简述小编关于Oracle性能问题的优化经验,希望能对我们的客户有所帮助。
一、数据库Redo log过于忙碌
Redo log指的是数据库的重做日志文件,主要用于数据库出现故障之后,进行数据恢复。Redo log分为在线重做日志和归档日志两种,这里小编主要描述在线重做日志。
小编在采用2000个用户进行某个应用的高并发测试时,出现响应时间较长的问题,经过应用日志分析后,发现时间基本都消耗在数据库操作部分。所有的Redo log均处在活跃状态,Redo log过于忙碌,原来是安装Oracle数据库的时候,默认的Redo log为3组,每组大小为50M,处理日常的业务没有问题,但是高并发的时候日志明显过小。而较佳的Redo log应该30min左右切换一次,所以重新设置Redo log为4组,每组大小1G,重新进行压测,数据库操作耗时减少,TPS就翻番了。
二、数据库表的索引失效问题
数据库中创建了不合适的索引,不仅会影响TPS的曲线,而且会导致数据库操作的时间越来越长。以某系统的流水表来说,根据测试日志,发现其中一条查询语句会随着流水表中数据的增多,耗时会迅速增大。查看该条语句的执行计划,发现其中某一步所用的索引并不合适,选用的索引对于提高查询效率帮助不大,因此新增一条以查询条件建立的索引。但是实际测试时,时灵时不灵,ORACLE并不一定会选择性能最高的索引,除非在测试前执行ORACLE的统计分析命令。但是这并不能根本解决问题,最好的办法是删除之前影响性能的索引。
三、数据库的软解析问题
在某一次的性能测试当中,小编发现两台测试机器的硬件配置一致,但是测试出的TPS差距却很大。导出来Oracle配置文件pfile.ora,对比两个数据库的参数配置,发现其中一台设置了软解析相关的参数“.cursor_sharing='FORCE'”,强制数据库软解析。修改这个参数后,两台机器的性能基本一致。其他还有影响的数据库参数如memory_target,open_cursors,processes,session_cached_cursors,sessions,shared_pool_size等,在性能测试当中,也都应调整到合适的大小。
四、AWR报告中查找可优化的sql
性能测试过程中发现数据库出现瓶颈,但是无法定位到具体原因;或者想了解生产上数据库的运行状况,但是没有合适的监控软件。这时,都可以通过Oracle自带的AWR工具生成html报告,进行分析定位。在sqlplus中执行awrrpt.sql脚本,选择html报告类型,再选择快照的日期和时间点,就可以生成相应的html文件。在html文件中可以查看到最耗时间、最耗CPU、最耗内存、最耗IO的sql语句排名情况。找到这些sql之后,便可分析它们是否可以优化。
想获取更多的性能测试问题和调优经验,欢迎致电银企汇哦~
领取专属 10元无门槛券
私享最新 技术干货