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#;
相关推荐
非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK
SQLTracker,非常好用的抓取sql语句的工具,可以再没有源码的情况下抓取出执行的SQL语句。
Oracle SQL Profiler,自己设计算法写的一款非常好用的抓取Oracle数据库SQL语句的工具,可以再没有源码的情况下监控ORACLE数据库服务器的v$sqlarea视图抓取出从点击开始按钮到点击结束按钮期间执行过的SQL语句。...
cpu变高后能够自动抓取到cpu的报文,并保存到本地flash卡中。
实验:Wireshark软件在运用FTP命令时抓取TCP头结构.docx
抓取jstack方法及解决system用户执行jstack命令权限问题, 打开cmd窗口,输入命令 jstack -l 49824>>C:/error01.txt 其中49824为tomcat8.0 的pid ; error01.txt 这个可以自己取名字 多输出几份jstack 文件,做比对...
使用正则表达式和requests,抓取猫眼 TOP100 的电影信息
这是从Toad110.6提取出来的、监视使用Oracle数据库的应用程序执行时对数据库进行操作的sql的工具,包含32位版和64位版,绿色软件,解压缩后就能用。
Python爬虫抓取网页新闻数据到sqlserver数据库,按标题排除重复项,python3.7运行环境
基于python抓取豆瓣电影TOP250的数据及进行分析.pdf
SQLMonitor 、sql抓取 可以用来监视 SQL文,以及SQL文的参数
1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做...基于Python实现豆瓣电影TOP250抓取并对爬取的数据进行分析(源码).zip
Oracle监控数据库性能常用的SQL语句
在线邮件列表抓取与发送系统2.0(完整SQL版) 2.0增强了邮件抓取的功能 概述: ·最大的特点就是发送成功率为100%,并不会成为垃圾邮件 ·1小时可将从20万txt文本邮址导入到数据库 ·24小时可从指定网站高效抓取1-2万...
监控SQL语句,实时抓取程序调用的SQL语句,方便程序开发,查找SQL语句
1、目的:在实际工作中,有时需将某个程序执行的所有SQL查出来,而程序在Oracle中与会话均可对应,故可通过本文脚本对会话的所有SQL进行跟踪,转换后即可还原程序对Oracle的操作。 2、适用场景:在源码无法拿到,但...
测试抓取ibatis日志生成的sql会有很多问号,参数填充太麻烦,所以写了一个窗口sql参数自动填充工具
邮箱抓取工具