oracle 中如何定位重要(消耗资源多)的SQL
链接:http://www.xifenfei.com/699.html
作者:惜分飞©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
1、查看值得怀疑的SQL
select substr(to_char(s.pct,'99.00'),2)||'%'load, s.executions executes, p.sql_textfrom(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 pwhere s.ranking<=5 and p.address=s.addressorder 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_readsfrom(select sql_text, disk_reads from v$sqlarea order by disk_reads desc)where rownum<21; |
6、查看排序多的SQL
select sql_text, sortsfrom(select sql_text, sorts from v$sqlarea order by sorts desc)where rownum<21; |
7、分析的次数太多,执行的次数太少,要用绑变量的方法来写sql
select substr(sql_text, 1, 80) "sql", count(*), sum(executions) "totexecs" from v$sqlarea where executions < 5 group by substr(sql_text, 1, 80)having count(*) > 30 order by 2;2 确定是oracle的应用进程还是后台进程
3 根据v$session,v$process,v$sqlarea定位
用oem带的top session www.2cto.com
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC
v$sql,v$sqlarea,v$sqltext有什么区别
共同点:1)都存储了sql内容2) 记录的都是位于内存中的sql内容3) 因为是内存,所以都不保留历史记录不同点:1)存储的为止不都是相同。其中v$sql和v$sqlarea存储的sql都是位于shared sql area中的sql,而v$sqltext是位于sga中的sql。但文档没有明确说明这里的sga是否还包含了psa(私有sql区域--共享服务器模式下)。2)存储sql的方式也不同,v$sql和v$sqlarea都是用一行来存储sql全文,而v$sqltext用一行存储sql的一行。3)v$sql不存储包含group by 的sql语句。通常这个视图,在每个查询执行完成后更新,但对于执行很久的sql,它是每5秒更新一次,这点对于查看sql执行状态是有意义的。4)存储的明细不同--这是最基本的。V$SQL 在子游标级别上列出了在共享sql区域的统计信息,他将原始sql文本展现为一行。V$SQL中的视图信息一般在sql执行的最后进行更新。然而,对于长 时间执行的sql,每5秒会更新一次v$sql视图。这使得很容易查看长时间执行的sql在运行过程中带来的影响。v$sql列说明,如没有特别说明,均指子游标,存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息SQL> desc v$sql Name Null? Type ----------------------------------------- -------- ---------------------------- |
SQL_TEXT //当前正在执行的游标的sql文本的前1000个字符SQL_FULLTEXT //CLOB类型 整个sql文本,不用借助于V$SQL_TEXT视图来查看整个文本SQL_ID //库缓存中的SQL父游标的标志SHARABLE_MEM //子游标使用的共享内存的大小,bytesPERSISTENT_MEM //子游标生存时间中使用的固定内存的总量,bytesRUNTIME_MEM //在子游标执行过程中需要的固定内存大小,bytesSORTS //子游标发生的排序数量LOADED_VERSIONS // 显示上下文堆是否载入,1是,0否USERS_OPENING // 执行这个sql的用户数FETCHES // sql取数据的次数EXECUTIONS //自从被载入共享池后,sql执行的次数 FIRST_LOAD_TIME // 父游标产生的时间戳PARSE_CALLS //解析调用的次数 DISK_CALLS //读磁盘的次数DIRECT_WRITES //直接写的次数BUFFER_GETS //直接从buffer中得到数据的次数APPLICATION_WAIT_TIME // 应用等待时间,毫秒CONCURRENCY_WAIT_TIME //并发等待时间,毫秒USER_IO_WAIT_TIME //用户IO等待时间ROWS_PROCESSED SQL //解析sql返回的总行数OPTIMIZER_MODE //优化器模式OPTIMIZER_COST //优化器对于sql给出的成本PARSING_USER_ID //第一个创建这个子游标的用户idHASH_VALUES //解析产生的哈希值CHILD_NUMBER //该子游标的数量SERVICE //服务名CPU_TIME //该子游标解析,执行和获取数据使用的CPU时间,毫秒ELAPSED_TIME //sql的执行时间,毫秒INVALIDATIONS //该子游标的无效次数MODULE //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的模块名ACTION //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的动作名 IS_OBSOLETE //标记该子游标过期与否,当子游标过大时会发生这种情况is_bind_sensitive //不仅指出是否使用绑定变量窥测来生成执行计划,而且指出这个执行计划是否依赖于窥测到的值。如果是,这个字段会被设置为Y,否则会被设置为N。is_bind_aware //表明游标是否使用了扩展的游标共享。如果是,这个字段会被设置为Y,如果不是,这个字段会被设置为N。如果是设置为N,这个游标将被废弃,不再可用。is_shareable //表明游标能否被共享。如果可以,这个字段会被设置为Y,否则,会被设置为N。如果被设置为N,这个游标将被废弃,不再可用。 |
v$sqlarea的字段定义和v$sql基本一致,不同的是V$SQLAREA是在父游标级别上统计的sql信息,v$sql的汇总表,进行了group by hash_value,sql_id的汇总。
SQL> desc v$sqlarea Name Null? TypeSQL_TEXT VARCHAR2(1000) SHARABLE_MEM NUMBER PERSISTENT_MEM NUMBER RUNTIME_MEM NUMBER SORTS NUMBER VERSION_COUNT NUMBER LOADED_VERSIONS NUMBER OPEN_VERSIONS NUMBER USERS_OPENING NUMBER FETCHES NUMBER EXECUTIONS NUMBER USERS_EXECUTING NUMBER LOADS NUMBER FIRST_LOAD_TIME VARCHAR2(38) INVALIDATIONS NUMBER PARSE_CALLS NUMBER DISK_READS NUMBER BUFFER_GETS NUMBER ROWS_PROCESSED NUMBER COMMAND_TYPE NUMBER OPTIMIZER_MODE VARCHAR2(25) PARSING_USER_ID NUMBER PARSING_SCHEMA_ID NUMBER KEPT_VERSIONS NUMBER ADDRESS RAW(4) HASH_VALUE NUMBER MODULE VARCHAR2(64) MODULE_HASH NUMBER ACTION VARCHAR2(64) ACTION_HASH NUMBER SERIALIZABLE_ABORTS NUMBER CPU_TIME NUMBER ELAPSED_TIME NUMBER IS_OBSOLETE VARCHAR2(1) CHILD_LATCH NUMBER |
v$sqltext本视图包括Shared pool中SQL语句的完整文本,一条SQL语句可能分成多个块被保存于多个记录内。注:V$SQLAREA和v$sql中的SQL_TEXT字段只包括头1000个字符, SQL_FULLTEXT以CLOB方式包含了所有的字符V$SQLTEXT列说明HASH_VALUE SQL语句的Hash值ADDRESS sql语句在SGA中的地址SQL_TEXT SQL文本。PIECE SQL语句块的序号SQL_ID SQL idCOMMAND_TYPE 命令类型,如select、insert等oracle 中如何定位重要(消耗资源多)的SQL的更多相关文章
- oracle 中如何定位重要(消耗资源多)的SQL【转】
1.查看值得怀疑的SQL )||'%'load, s.executions executes, p.sql_text from(select address, disk_reads, executio ...
- log4j向oracle中插入一条系统当前时间的sql语句
配置log4j,要向oracle插入一条系统当前时间的sql语句,按网上查找的总是出现各种各样的报错,最后总结出的写法是: ### shezhi### log4j.rootLogger = debug ...
- postgresql定位分析消耗CPU高的SQL语句
第一步:使用TOP命令查看占用CPU高的postgresql进程,并获取该进程的ID号,如图该id号为3640 第二步:切换到postgres用户,并且psql连接到数据库,执行如下查询语句 SELE ...
- oracle中scott用户下四个基本表SQL语句练习
--选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...
- 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...
- 在oracle中操作数据——使用特点的格式插入日期 sql函数的使用——日期函数
日期函数用于处理date类型的数据,默认情况下的日期格式是dd-mm-yy即12-7月-78 (1)sysdate:该函数返回系统时间 (2)add_months(d,n) (3)last_day(d ...
- 跟踪oracle中sql语句运行过程及相关知识拓展
select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...
- Oracle中的内置函数在sql中的转换整理
程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...
- ORACLE 如何定位消耗资源的SQL
在分析SQL性能的时候,经常需要确定资源消耗多的SQL,总结如下: 1 查看值得怀疑的SQLselect substr(to_char(s.pct, '99.00'), 2) || '%' load, ...
随机推荐
- Vue学习记录(二)
一.指令 指令是Vue.js中一个重要的特性,主要提供了一种机制将数据的变化映射为DOM行为.当数据变化时,指令会依据设定好的操作对DOM进行修改,这样就可以只关注数据的变化,而不用去管理DOM的变化 ...
- Windows Defender 无法启动
最近win10 企业版操作系统中,Windows Defender 无法 启动,并提示消息 : to allow this app run , contact your security admin ...
- C# WPF DevExpress 图表控件之柱状图
说明:DevExpress版本是17.1.VS是2015. XAML: <!--#region 图表控件--> <dxc:ChartControl x:Name="char ...
- LeetCode 3. longest characters & 切片
Longest Substring Without Repeating Characters 找无重复的最长子串 第1次提交 class Solution: def lengthOfLongestSu ...
- 转:JSON 获取属性值的方法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...
- Patrick Hughes - 错觉3D雕塑艺术
Pictures Patrick Hughes (artist) From Wikipedia, the free encyclopedia Patrick Hughes. Leaning on a ...
- uva-10716-贪心
题意:输入长度在100内的小写字母的字符串,求把它变成回文字符串的最少交换次数.如果不能变成回文串,输入,Impossible. 解法: 要变成回文字符串,必须满足一个性质,所有的字符出现次数都是偶数 ...
- C++构造函数和析构函数执行顺序
四种情况:1. 创建一个类指针时,调用其构造函数:删除当前指针时,自动调用其析构函数.2. 创建子类对象指针时,首先调用其父类的构造函数,然后调用子类的构造函数:删除当前指针时先调用子类的析构函数,然 ...
- enum使用方法
DK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: publicstaticfianl... ...
- 功能测试-UI测试思考点
界面是否美观 元素大小 界面元素是否对齐方式统一 界面字体属性是否正确 界面链接及触发动作( 链接的地址是否正确,不允许存在死链的情况 链接打开方式,当前页面还是新开页面 鼠标点击后的颜色是否美观,不 ...