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

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
                                                                         
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.

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

时间: 2024-09-09 06:10:27

通过top命令抓取cpu高消耗的sql的相关文章

如何通过c语言实现Linux下的top命令来获取cpu利用率?

问题描述 如何通过c语言实现Linux下的top命令来获取cpu利用率? 如何通过c语言实现Linux下的top命令来获取cpu利用率?我下载了好几个版本的procps但是在Ubuntu下编译里面的top.c时都出错,求各位大神帮忙解答. 解决方案 linux下用top命令查看cpu利用率超过100%linux下用top命令查看cpu利用率超过100%LINUX下查看CPU使用率的 top 命令 解决方案二: #include <stdio.h>#include <unistd.h>

按内存占用排序和按CPU占用排序的Linux TOP命令

  Linux TOP命令默认是CPU占用排序,按M可以切换到按内存占用排序.这是系统维护和电脑内存维护.可以切换的.不同的用法,达到不同的效果.以下是关于这两个的详细说明. P – 以 CPU 占用率大小的顺序排列进程列表 M – 以内存占用率大小的顺序排列进程列表 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对

CentOS中使用top命令查看CPU

  CentOS 是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在 RHEL 的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖. 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.

使用top命令查看CPU负载

在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.退出 top 的命令为 q (在 top 运行中敲 q 键一次).  在命令行中输入 "top" 即可启动 top ,运行后如下图所示:   top运行中的截图 如上图所示,top 的全屏对话模式可

SQL Server定时自动抓取耗时SQL并归档数据脚本分享

原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] GO 第二步创建sp_who3存储过程 -- http://sqlserverplanet.com/dba/a-better-sp_who2-using-dmvs-sp_who3 USE [MonitorElapsedHighSQL] GO CR

请教一个nutch抓取问题

问题描述 想用nutch爬虫抓取http://news.163.com/rank/这个网页,做法如下:1.在urls/seed.text文件中增加路径:http://news.163.com/rank/2.使用命令抓取,命令为:./bin/nutchcrawlurls-dircrawl_163_rank-depth3-threads3-topN5抓取结果为:[root@localhostapache-nutch-1.7]#./bin/nutchcrawlurls-dircrawl_163_ran

Linux下使用python调用top命令获得CPU利用率_python

本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况. 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 复制代码 代码如下: top -bi > cpuHistory.log 或 复制代码 代码如下: top -bi | tee  cpuHistory.log 这个就不解释了,不懂的朋友查询下top的帮助文档.这里要实现的是通过python调用top命令,并获得cpu的利用率信息. 用过popen的朋友很快就能想到类似如下的代码(这个是我第

Android 抓取LOG的几种命令

通常调试时候需要抓取log信息,下面几种通过ADB命令来抓取log的方法:      USB连接上手机,手机需要其他操作:然后运行ADB工具:输入不同的命令即可抓取对应的LOG信息.      抓取radio LOG信息命令:                                       adb logcat -b radio -v time >log_radio.txt      抓取main LOG信息命令:                                   

linux系统top命令分析CPU和内存详解

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,默认linux操作系统提供. 在命令行中直接敲入top回车,即可实时显示系统中各个进程的资源占用状况.如下图: 其中各参数含义分别如下: 第一行top:显示了系统当前时间.系统运行了多长时间.当前登录用户.以及系统在1分钟/5分钟/15分钟内的平均负载 第二行tasks:显示了当前进程数是124个,以及有1个正在运行状态.有123个进程在休眠.0个停止运行.0个处于僵尸状态 第三行cpu(s):显示CPU的状态