http://blog.itpub.net/12679300/viewspace-2125679/

当系统运行了一段时间后,系统基本也趋于稳定了,SQL调优也变了DBA的一个主要的工作内容,很多时候都是通过查看awr报告来检查出有性能瓶颈的SQL语句,通过这个可以很清晰的看到具体运行多少时间、次数、CPU、IO的比例。

但是每次都去查看awr报告是一件很繁琐的事情,如果可以单独的查看哪些有问题的sql,就不用每次都去生成一个awr报告了。dba_hist_sqlstat这个视图记录了每次snap_id里面的sql信息,这里帮大家把整个脚本编写出来了。

点击(此处)折叠或打开

  1. SELECT v.SQL_TEXT,m.* FROM (select distinct snap_id,
  2. sql_id,
  3. EXECUTIONS_DELTA,
  4. trunc(max(ELAPSED_TIME_DELTA)
  5. OVER(PARTITION BY snap_id, sql_id) / 1000000,
  6. 0) max_elapsed,
  7. trunc((max(ELAPSED_TIME_DELTA)
  8. OVER(PARTITION BY snap_id, sql_id)) /
  9. (SUM(ELAPSED_TIME_DELTA) OVER(PARTITION BY snap_id)),
  10. 2) * 100 per_total
  11. from dba_hist_sqlstat t WHERE T.snap_id IN (SELECT MAX(snap_id) FROM dba_hist_sqlstat) ) M,v$sql v
  12. where m.sql_id=v.sql_id and m.max_elapsed>=300

这个脚本是查找m.max_elapsed>=300(这边的单位是秒),也是5分钟的时间,可以根据系统的实际情况进行定义;

可以看出sql_id值为d1ftvurv76hct运行一次,这次运行的时间为1199s,占总体消耗的36%。

【另】可以通过运行定时job执行这条sql语句,然后发送有问题的sql信息到用户的邮箱;

SELECT v.SQL_TEXT,m.* FROM (select distinct snap_id,
sql_id,
EXECUTIONS_DELTA,
trunc(max(ELAPSED_TIME_DELTA)
OVER(PARTITION BY snap_id, sql_id) / 1000000,
0) max_elapsed,
trunc((max(ELAPSED_TIME_DELTA)
OVER(PARTITION BY snap_id, sql_id)) /
(SUM(ELAPSED_TIME_DELTA) OVER(PARTITION BY snap_id)),
2) * 100 per_total
from dba_hist_sqlstat t WHERE T.snap_id IN (SELECT MAX(snap_id) FROM dba_hist_sqlstat) ) M,v$sql v
where m.sql_id=v.sql_id and m.max_elapsed>=300

[z]根据awr报告查看最慢的sql语句的更多相关文章

  1. 用LinqPad查看Nhibernate生成的sql语句

    使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行查看及分析,查看Nhibernate生成的sql语句,可以使用NHProfiler和log4net.但NHProfiler ...

  2. 【转载】 Sqlserver查看数据库死锁的SQL语句

    在Sqlsever数据库中,有时候操作数据库过程中会进行锁表操作,在锁表操作的过程中,有时候会出现死锁的情况出现,这时候可以使用SQL语句来查询数据库死锁情况,主要通过系统数据库Master数据库来查 ...

  3. mysql查看正在执行的sql语句

    有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...

  4. 两种方式:mysql查看正在执行的sql语句

    mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398   有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应 ...

  5. 查看锁表进程SQL语句

    查看锁表进程SQL语句   set pagesize 999 set line180 col ORACLE_USERNAME for a18 col OS_USER_NAME for a18 col ...

  6. db2数据库创建索引,删除索引,查看表索引,SQL语句执行计划以及优化建议

    1.建立表索引 create index 索引名 on 表名(列名,列名); 2.删除表索引 drop index 索引名 on 表名; 3.查看表索引 select * from sysibm.sy ...

  7. [NHibernate]查看NHibernate生成的SQL语句

    最近接触到一个用Spring.Net结合NHIbernate的项目,第一次使用,有很多配置,数据操作一旦出问题,很难找到原因,那么如何查看NHibernate发送给数据库的SQL语句呢? 当然我们可以 ...

  8. phpmyadmin查看创建表的SQL语句

    本人菜鸟 发现创建表的SQL语句还不会 直接phpmyadmin解决的 查看见表的语句除了直接到处SQL格式文件 打开查看外 就是执行语句查询 语句:show create table 表名  貌似大 ...

  9. MySql使用show processlist查看正在执行的Sql语句

    今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...

随机推荐

  1. ZooKeeper自定义数据日志目录

    安装版本:zookeeper-3.4.10 问题描述: ZooKeeper在启动时会将zookeeper.out输出到当前目录,不仅不友好,有时候可能会因为目录权限问题引发一些不必要的麻烦. 脚本分析 ...

  2. python玩丢手绢问题,出局的顺序

    # 丢手绢问题# 游戏规则: 有N个小朋友玩丢手绢游戏,做成一圈,从第一个小朋友开始数数,从一开始数,数到指定数字的小朋友要出列,然后下一个小朋友继续从1开始数,依次类推,算出最后一个留下来的小朋友是 ...

  3. linux shell 语法学习

    文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tmp/ ...

  4. Android源码50例汇总,欢迎各位下载(转载)

    下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载. 源码实例如下: <Android应用开发揭秘>源代码推荐 http://down.51 ...

  5. C# 监测每个方法的执行次数和占用时间(测试1)

    在Nuget引用 Castle.DynamicProxy 和 Newtonsoft.Json 这个 原文:http://www.cnblogs.com/RicCC/archive/2010/03/15 ...

  6. Java 中 == 和 equals 的区别

    有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...

  7. 抢红包js程序

    https://www.cnblogs.com/miid/p/5192235.html <!DOCTYPE html> <html> <head> <meta ...

  8. TensorFlow 语法

    dataset = tf.data.TextLineDataset(file_path) 生成一个dataset,dataset中的每一个元素就对应了文件中的一行

  9. vue pros 子组件接收父组件传递的值

    1.子组件 ItemTemplate.vue <template> <div class="item"> <li v-for="pdata ...

  10. pom配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...