在前几天,有个开发同事问我一个问题,其实也算是技术救援,他说在有个job数据处理的频率比较高,在测试环境中很难定位出在哪有问题,而且速度也还能接 受,但是在生产环境中总是会慢一些,希望我能在测试环境中协助他们,看看是不是sql语句出什么问题了还是其它相关的问题。
这种类似实时监控的语句,从第一印象来说,很可能通过awr捕获不到,如果通过ash来捕获,因为测试环境中有几十套测试环境在运行,就算得到某个时间点
的一些sql语句,直接在报告中映射到语句对应的schema信息还是有一些困难的。因为测试时间确实很短,有很多的语句执行了,可能不一定被ash收集
到。
我和他首先做了沟通,因为我压根不知道这是哪个应用的环境,所以先需要几分钟的时间来熟悉一下环境,提前准备一下。
数据库中存在大概50套测试环境,占用的session数大概在4000个左右。整体来看测试环境中的数据量都不大。每个环境都大概在10G-30G以内。
定位到制定的测试环境中,发现session占用情况也不高。都是一些常规的job使用,没有看到其它明显的session消耗,查看相关的锁信息,也没有发现什么问题。
简单确认之后,发现awr在这个时候是用不了了,最多使用下ash来看,除此之外,还可以使用脚本实时监控。
类似下面这样的操作。
> getash.sh
I    SID   SER# USERNAME     OSUSER     STA RPID    SPID  
MACHINE    PROGRAM              ELAP_SEC    TEMP_MB UNDO_MB SQL_ID      
 TSPS   SQL

-- ------ ------ ------------ ---------- --- ------- ------ ----------
-------------------- ----------- ------- ------- ------------- ------
-------------------------------------------------
 1     19  16945 xxxx    blwrk01   ACT 9442    9442   ccbdbprx  
oracle@xxxxxx  00 05:35:02                 b9xg175fbzuk5        INSERT
INTO xxxx (CYCLE_SEQ_NO, PAY

上面的语句也可以通过watch来指定频率看到每个用户下的信息实时变化情况。监控的过程中确实也能看到不少的信息变化,但是执行的时间确实很短,只能够抓取到一部分sql语句。简单分析了下,那些语句都没有发现有什么问题。
这个时候还是得靠开发协助,希望他们提示一些更细节的信息,这个业务场景要做的事情和一些指定的数据,他们提供说使用了某个表中资源号
为 x271051128的数据,这个时候通过v$sql从缓存中就能够快速定位到语句,这个时候再和ash配合起来就能够确认是否是相关的用户在调用
了。
最后抓取到了几条语句,和开发确认之后定位到一条语句,语句类似下面这样的形式。

select
owner_id,

l3_balance_amount,

expiration_date,

customer_id,

c64_1,

l3_balance_Status,

sys_update_date,

sys_creation_Date

from accumulators

where
customer_id in

(select customer_id

from subscriber

where prim_Resource_Val in ('x271051128'))

and owner_type = 'P'
通过抓取执行计划,发现subscriber表走了全表扫描。这个对应生产环境中的性能影响还是比较大的。

对于这个问题的调优,其实可以完全通过业务层面来优化,可以参考http://blog.itpub.net/23718752/viewspace-1312163/
问题是类似的,略有不同。我们可以引入一个更大的资源表,资源表agreement_resource和用户表subscriber,使用索引字段来关联,就避免了subscriber表的全表扫描。
调整后的语句如下:

select
owner_id,

l3_balance_amount,

expiration_date,

customer_id,

c64_1,

l3_balance_Status,

sys_update_date,

sys_creation_Date

from ape1_accumulators

where
customer_id in

(

select customer_id

from subscriber s

where (subscriber_no, PRIM_RESOURCE_TP)
in

(select agreement_no, RESOURCE_TYPE

from agreement_resource r

where r.resource_value in ('x271051128'))

)

and owner_type = 'P'
通过调整后的执行计划可以看出,性能的提升还是很大的。这个是测试环境的数据,如果在数据量大的时候,优势就更加明显了。

所以对于这个问题,起因是有个job数据处理的频率比较高,在测试环境中很难定位出在哪有问题,而且速度也还能接受,但是在生产环境中总是会慢一些,其实深究起来还是有原因的,只能通过各种细节去诊断发现了。

原文:http://blog.itpub.net/23718752/viewspace-1656969/

快速定位隐蔽的sql性能问题及调优【转载】的更多相关文章

  1. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  2. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  3. Spark性能优化--开发调优与资源调优

    参考: https://tech.meituan.com/spark-tuning-basic.html https://zhuanlan.zhihu.com/p/22024169 一.开发调优 1. ...

  4. x86服务器中网络性能分析与调优 转

    x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 ...

  5. Java虚拟机性能监控与调优实战

    From:  https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...

  6. Java生产环境下性能监控与调优详解

    1:JVM字节码指令与 javapjavap <options> <classes>cd monitor_tuning/target/classes/org/alanhou/m ...

  7. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  8. 软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结

    本文主要阐述软件性能测试中的一些调优思想和技术,节选自作者新书<软件性能测试分析与调优实践之路>部分章节归纳. 在国内互联网公司中,Web中间件用的最多的就是Apache和Nginx这两款 ...

  9. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

随机推荐

  1. Html盒子模型学习总结

    Html的盒子模型 1.总的来说Html元素可以分为两类:即块状元素和行内元素. 2.块状元素(Block)类型的元素可以设置Width和Height值属性,而行内(Inline)类型无效. 3.浏览 ...

  2. 查找计算机IP及占用端口

    1. 在电脑启动搜索框,输入cmd回车打开命令提示符窗口. 输入ipconfig,就可以查看电脑的子网淹没,默认网关,IP等信息. 2. 查看本机开放的端口,即已被占用的端口号. 命令: netsta ...

  3. Cassandra1.2文档学习(6)—— 客户端数据请求

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  4. NGUI系列教程一

    NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...

  5. NSAssert使用摘抄

    #define NSAssert(condition, desc, ...) 只有条件condition满足,才会执行下一个语句,否则输出断言错误. 例如: NSAssert(1 != 2, @&qu ...

  6. C# - 接口,继承

    接口 接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合.不能像实例化一个类那样实例化接口.接口不能包含实现其成员的任何代码,而只能定义成员本身.实现过程必须在实现接口的类中完成. ...

  7. datanode无法连接到master

    初次在VM上配置Hadoop,开了三台虚拟机,一个作namenode,jobtracker 另外两台机子作datanode,tasktracker 配置好后,启动集群 通过http://localho ...

  8. Struts2WebUtil

    一个简单的实用工具类 package cn.jorcen.commons.util; import javax.servlet.http.HttpServletRequest; import org. ...

  9. Linux系统备份与还原

    在使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的 ...

  10. Java集合框架的知识总结(1)

    说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析. 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象 ...