当前位置: 首页 > news >正文

ORACLE 如何定位消耗资源的SQL

在分析SQL性能的时候,经常需要确定资源消耗多的SQL,总结如下: 

 

1 查看值得怀疑的SQL
select substr(to_char(s.pct, '99.00'), 2) || '%' load,
       s.executions executes,
       p.sql_text
  from (select address,
               disk_reads,
               executions,
               pct,
               rank() over(order by disk_reads desc) ranking
          from (select address,
                       disk_reads,
                       executions,
                       100 * ratio_to_report(disk_reads) over() pct
                  from sys.v_$sql
                 where command_type != 47)
         where disk_reads > 50 * executions) s,
       sys.v_$sqltext p
where s.ranking <= 5
   and p.address = s.address
order by 1, s.address, p.piece;

 

2 查看消耗内存多的sql

select b.username ,a. buffer_gets ,a.executions,
a.disk_reads/decode(a.executions,0,1,a.executions),a.sql_text SQL

from v$sqlarea a,dba_users b
where a.parsing_user_id = b.user_id 
 and a.disk_reads >10000 
order by disk_reads desc;

 

3 查看逻辑读多的SQL
select *
  from (select buffer_gets, sql_text
          from v$sqlarea
         where buffer_gets > 500000
         order by buffer_gets desc)
where rownum <= 30;

4 查看执行次数多的SQL 
select sql_text, executions
  from (select sql_text, executions from v$sqlarea order by executions desc)
where rownum < 81;

5 查看读硬盘多的SQL 
select sql_text, disk_reads
  from (select sql_text, disk_reads from v$sqlarea order by disk_reads desc)
where rownum < 21;

6 查看排序多的SQL 
select sql_text, sorts
  from (select sql_text, sorts from v$sqlarea order by sorts desc)
where rownum < 21;

7 分析的次数太多,执行的次数太少,要用绑变量的方法来写sql
set pagesize 600;
set linesize 120;
select substr(sql_text, 180) "sql", count(*), sum(executions) "totexecs"
  from v$sqlarea
where executions < 5
group by substr(sql_text, 180)
having count(*) > 30
order by 2;

8 游标的观察
set pages 300;
select sum(a.value), b.name
  from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
   and b.name = 'opened cursors current'
group by b.name;

select count(0) from v$open_cursor;

select user_name, sql_text, count(0)
  from v$open_cursor
group by user_name, sql_text
having count(0) > 30;

9 查看当前用户&username执行的SQL
select sql_text
  from v$sqltext_with_newlines
where (hash_value, address) in
       (select sql_hash_value, sql_address
          from v$session
         where username = '&username')
order by address, piece;

转载于:https://www.cnblogs.com/hllnj2008/p/4788659.html

相关文章:

  • Servlet/Jsp实现当参数确实或缺失重新显示输入表单
  • Servlet/Jsp实现发送压缩Web页面 Gzip技术
  • Java内存区域与内存溢出
  • 如何删除鼠标右键菜单里的打开按钮
  • Struts2的s:date标签使用详解[转]
  • JSP隐含对象(1)
  • 二级指针的思考
  • JSP隐含对象 request(2)
  • JSP实现网页计算器
  • MySQL汇总数据
  • 如何配置Tomcat的热启动
  • vncserver
  • 项目路径配置[pageContext.request.contextPath]和c标签
  • JSP隐含对象response实现文件下载的两种方式
  • JSP动态生成验证码
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Java 网络编程(2):UDP 的使用
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS变量作用域
  • js操作时间(持续更新)
  • mysql_config not found
  • Spring核心 Bean的高级装配
  • Twitter赢在开放,三年创造奇迹
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 记一次和乔布斯合作最难忘的经历
  • 聚簇索引和非聚簇索引
  • 来,膜拜下android roadmap,强大的执行力
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 七牛云假注销小指南
  • 前端
  • 浅谈web中前端模板引擎的使用
  • 一些css基础学习笔记
  • 用Visual Studio开发以太坊智能合约
  • AI算硅基生命吗,为什么?
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (33)STM32——485实验笔记
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二十四)Flask之flask-session组件
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (算法设计与分析)第一章算法概述-习题
  • .chm格式文件如何阅读
  • .Net 高效开发之不可错过的实用工具
  • //解决validator验证插件多个name相同只验证第一的问题
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [Angularjs]ng-select和ng-options
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [AX]AX2012 R2 出差申请和支出报告
  • [C++]18:set和map的使用
  • [CTSC2014]企鹅QQ
  • [C语言]——C语言常见概念(1)
  • [FTP]pureftp部署和优化