通过top命令抓取cpu高消耗的sql

标签: top 命令 cpu | 发表时间:2015-08-25 20:37 | 作者:wyzuomumu
出处:http://www.iteye.com

top命令在linux环境维护中很实用,虽然功能缺失不够sar那么全面。今天和大家分享一个通过top命令来抓取性能sql的案例。
通过top命令抓取了如下的信息。

 pid是3585的进程对应的sql 之前已经确定是性能问题导致的了,所以先放过,可以看看pid是8879的这个进程,出现的不是很“稳定”。
可能通过ash,awr不一定能够及时的抓住这些信息,但是通过及时的分析,可能有时候会得到一想不到的收获。
可以通过v$session,v$process,v$sql来结合查找process对应的sql.
可以看到这个进程是属于一个远程的session(LOCAL=NO),是通过一个batch的服务器上发起的请求。
执行的sql很简单。就是一个简单的查询。初步怀疑就是因为查询走了全表扫描而且那个字段可能没有索引。

 为了确认,查看表的结构来看看。可以结合user_tab_cols,user_ind_columns来查看表的属性和索引的信息。这些都是用准备好的脚本来生成的,过滤了一些不必要的信息。
可以看到,索引是存在的,在ext_account_number上,而且是唯一性索引。如果那样的话走全表扫描就有些不合常理了。

 如果观察的再仔细些,可以看到ext_account_number那个字段是varchar2(12)的。
为了验证表肯定走了全表扫描,我抓了一个awrsqrpt的报告。内容如下,可以看到的确走了全表扫描。而且buffer gets还挺大,cpu消耗比较高。

 到此为止,如果还不没明白的话,我做个简单的测试。

我从表里随机抓取10条记录。
SQL> SELECT balance ,EXT_ACCOUNT_NUMBER from ACCOUNT WHERE rownum<=10;   
                                                                         
BALANCE EXT_ACCOUNT_NUMBER
---------- ------------                                                  
         0 10257832                                                      
    772.81 10260829                                                      
    584.22 10259790                                                      
    329.03 10258781                                                      
      -.39 10263317                                                      
      -.14 10260830                                                      
    496.79 10258782                                                      
         0 10258783                                                      
      -.83 10258785                                                      
      -.91 10259791                                                      
                                                                         
10 rows selected.                                                        
然后来trace一把。看看执行的情况。
可以看到,确实走了全表扫描,没有走索引。可以看到filter部分,对于ext_account_number它是在解析的时候做了类型转换的,从varchar2转为number。
一致性读有12704.

 这样问题的根源就很清晰了。再换一个,试试走索引的情况。可以看到,效率有了极大的提升。剩下的问题就是协调来解决了。

 

select ses.sid,ses.serial#,ses.username,ses.machine,ses.osuser,pro.terminal,ses.type,ses.logon_time,sql.sql_text
from v$session ses, v$process pro, v$sql sql
 where ses.paddr = pro.addr
   and ses.SQL_HASH_VALUE = sql.HASH_VALUE
   and ses.SQL_ADDRESS = sql.address
   and  ses.sql_address = sql.address
   and pro.pid = #pid#;

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [top 命令 cpu] 推荐:

通过top命令抓取cpu高消耗的sql

- - 行业应用 - ITeye博客
top命令在linux环境维护中很实用,虽然功能缺失不够sar那么全面. 今天和大家分享一个通过top命令来抓取性能sql的案例. 通过top命令抓取了如下的信息.  pid是3585的进程对应的sql 之前已经确定是性能问题导致的了,所以先放过,可以看看pid是8879的这个进程,出现的不是很“稳定”.

通过top和jstack确定哪些线程耗尽了CPU

- - 操作系统 - ITeye博客
有时,线上集群load会突然飙升,无法响应正常请求. 那么引起load飙升的线程究竟在做什么. 可以通过top和jstack命令进行定位. 使用终端1进入目标机器,执行top命令,默认是进程视图,其中PID是进程号,截图如下:. 在这里,我们只能看到java进程占用CPU达到115%,那么究竟是那些线程非常耗CPU呢.

[新手教程] Linux Top 命令

- Perry - Wow! Ubuntu
top 命令是最流行的性能监视工具之一,我们必需了解. 它是一个优秀的交互式工具,用于监视性能. 它提供系统整体性能,但报告进程信息才是 top 命令的长处. top 命令交互界面如下图所视:. top 界面分为两个部份,光标上面部份显示关于系统整体性能,光标下面部份显示各进程信息. 光标所在处是用来输入操作命令的.

高效使用Top

- - 博客 - 伯乐在线
英文原文: Using Top More Efficiently,编译: oschina. 对桌面用户来说,监视系统资源使用是一项重要的工作. 通过这项工作,我们可以找到系统瓶颈所在,针对性的进行系统优化,识别内存泄露等. 问题是,我们应该用什么软件,以及如果针对我们的需求使用它. 在众多备选的监测工具中,多数人使用“top”(procps 包的一部分).

8086 CPU 寄存器简介

- 田野 - 博客园-首页原创精华区
打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识,. 自然,还是得从最基础的开始,那就从汇编语言开刀吧,. 从汇编语言开刀的话,我们必须还先要了解一些其他东西,. 像  CPU ,内存这些知识点还是理解深刻一点的比较好,. 所以这一篇博文就绕着 80x86  CPU 中寄存器的基础部分下手,至于其他的一些将会在后续的博文中介绍.

CPU架构:i386,x86,AMD64

- - 脚本爱好者
IA32 : 32 bits Intel Architecture (32位带宽Intel构架). IA64 : 64 bits Intel Architecture (64位带宽Intel构架). i386 : Intel 386 ( 老的386机器,也泛指IA32体系的CPU). i586 : Intel 586 ( Pentium ,K6 级别CPU ).

2010 年 Cydia 程序 Top 10

- yan - 爱范儿 · Beats of Bits
MacStories 评选出了 2010 年度 Cydia 商店上的 Top 10 ,这次入选的程序,都是今年内发布的,涵盖 iPhone 和 iPad 平台. “把 iOS 设备发挥到极致”是越狱开发者的初衷,如果你手上的设备越狱了,就一定要看看这些奇妙的程序. FullScren for Safari 自然是 iPhone 自带浏览器的全屏工具,它把浏览器的顶栏和底部按钮给隐藏起来.

从Java视角理解CPU缓存(CPU Cache)

- - 淘宝网通用产品团队博客
从Java视角理解系统结构连载, 关注我的微博( 链接)了解最新动态众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿.

GPU对战CPU,试验出真知

- nasachn - IFLONELY
MythBusters的两个科学怪才的牛做. 新奇图片搜索引擎Sprixi.

Erlang监测系统CPU、内存、磁盘

- chuang - Jobin的主页
Erlang的os_mon服务中提供了一些用于监测系统信息的服务. cpu_sup:监测CPU负载和使用率(Unix). disksup:监测磁盘(Unix、Windows). memsup:监测内存(Unix、Windows、VxWorks). os_sup:监测系统日志(Solaris、Windows).