当前位置: 代码迷 >> Oracle开发 >> 应用跑一段时间后插入数据变慢,该如何处理
  详细解决方案

应用跑一段时间后插入数据变慢,该如何处理

热度:19   发布时间:2016-04-24 06:39:23.0
应用跑一段时间后插入数据变慢
本帖最后由 zlloct 于 2014-06-24 12:01:20 编辑
最近在做系统性能测试,用的是orcale(11g),就是收到数据后不断解析并往数据库表里插入。刚开始没问题,从收到数据到入库都在几十毫秒左右,之后跑了5天入库的数据量达到了几千万,发现数据库插入速度变慢了,很不稳定,平均在几百毫秒左右才入库,有时甚至达到了1秒左右。如果停掉应用重新启动,又恢复正常入库速度。数据库中有用到了索引。请问问题可能出现在哪里,有没有可以定位问题的的方法。
下面是awr报告截图(不知道怎么将那个报告文件引过来):
报告中cpu那块好像没有记录:

------解决方案--------------------
这个数据有问题
重新采集一个,时间范围选应用高峰期(最忙的几个小时)
截取top 5事件
以及几个TOP SQL语句信息
------解决方案--------------------
引用:
Quote: 引用:

这个数据有问题
重新采集一个,时间范围选应用高峰期(最忙的几个小时)
截取top 5事件
以及几个TOP SQL语句信息
为啥我生成的报告还是有问题啊 有些还是没有,上面的那些cpu信息都没有

看看alert日志,是不是有报错
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这个数据有问题
重新采集一个,时间范围选应用高峰期(最忙的几个小时)
截取top 5事件
以及几个TOP SQL语句信息
为啥我生成的报告还是有问题啊 有些还是没有,上面的那些cpu信息都没有

看看alert日志,是不是有报错
日志里就这两个信息Thread 1 cannot allocate new log, sequence
Checkpoint not complete 


这个信息一般说明dml操作频繁,日志切换频繁,日志文件太小或io太慢
------解决方案--------------------
redo切换的问题很严重,是有大量的数据在插入吗
添加几个redo日志组,将文件大小增大
然后检查redo日志所在的磁盘的读写效率,看看是否存在io问题
------解决方案--------------------
logfile sync 增大redo日志文件减少切换;
enq-sq contention 在创建sequence时,默认的cache值太小
还有数据越插越慢,请分析下是不是有索引是单边加的,导致新记录插入时发生了大量索引分裂
------解决方案--------------------
引用:
Quote: 引用:

logfile sync 增大redo日志文件减少切换;
enq-sq contention 在创建sequence时,默认的cache值太小
还有数据越插越慢,请分析下是不是有索引是单边加的,导致新记录插入时发生了大量索引分裂

索引单边加是什么情况啊


以前碰到过一种情况,比较索引字段的值类似1,2,3,4。。。这样单边往上加的,在 数据量比较多的时候,会导致大量索引分裂(即插入索引时,索引树会生成新的节点,则索引树需要时刻去调整各个相关节点的位置),导致性能问题