oracle查看sql执行过程:分享两个脚本--查看Oracle数据库物理读
oracle查看sql执行过程:分享两个脚本--查看Oracle数据库物理读下面看下具体的sql情况。假设这里物理读将近逻辑读一半 因为在一般系统中很难得到这个比例 那就证明物理读过高了,这里因为不是高峰期,所以不怎么看得出来。从这个截图我们只计算下逻辑读和物理读:1.逻辑读大小:56222*8192/1024/1024=439M/s2.物理读大小:7173*8192/1024/1024=56M/s
概述今天主要介绍几个sql 可能很多人就收藏一下但很少会去用,所以结合案例来做一下分析,这样就知道在什么场景用了。
下面介绍一下案例。
1、监控分析
从监控发现物理IO读处于比较高的水平,截图如下:物理读基本保持在几十M,物理写很少。
这里拿了对应的awr报告,简单看下逻辑读和物理读情况。
从这个截图我们只计算下逻辑读和物理读:
1.逻辑读大小:56222*8192/1024/1024=439M/s
2.物理读大小:7173*8192/1024/1024=56M/s
假设这里物理读将近逻辑读一半 因为在一般系统中很难得到这个比例 那就证明物理读过高了,这里因为不是高峰期,所以不怎么看得出来。
下面看下具体的sql情况。
逻辑读前10的SQL
SELECT * FROM (SELECT sql_fulltext AS sql SQL_ID buffer_gets / executions AS "Gets/Exec" buffer_gets executions cpu_time elapsed_time last_active_time module FROM V$SQLAREA WHERE buffer_gets > 10000 and executions > 0 ORDER BY "Gets/Exec" DESC) WHERE rownum <= 10;
个别参数说明:
SQL_FULLTEXT //CLOB类型 整个sql文本,不用借助于V$SQL_TEXT视图来查看整个文本 SQL_ID //库缓存中的SQL父游标的标志 FETCHES // sql取数据的次数 EXECUTIONS //自从被载入共享池后,sql执行的次数 CPU_TIME //该子游标解析,执行和获取数据使用的CPU时间,毫秒 ELAPSED_TIME //sql的执行时间,毫秒 v$sqlarea的字段定义和v$sql基本一致,不同的是V$SQLAREA是在父游标级别上统计的sql信息,v$sql的汇总表,进行了group by hash_value sql_id的汇总。
物理读(磁盘读写)前10的sql
SELECT * FROM (SELECT sql_fulltext AS sql SQL_ID disk_reads / executions AS "Reads/Exec" disk_reads executions cpu_time elapsed_time last_active_time module FROM V$SQLAREA WHERE disk_reads > 1000 and executions > 0 AND is_obsolete = 'N' ORDER BY "Reads/Exec" DESC) WHERE rownum <= 10;
物理IO前10的表
SELECT TABLE_NAME TOTAL_PHYS_IO FROM ( SELECT OWNER||'.'||OBJECT_NAME AS TABLE_NAME SUM(VALUE) AS TOTAL_PHYS_IO FROM V$SEGMENT_STATISTICS WHERE OWNER!='SYS' AND OBJECT_TYPE='TABLE' AND STATISTIC_NAME IN ('physical reads' 'physical reads direct' 'physical writes' 'physical writes direct') GROUP BY OWNER||'.'||OBJECT_NAME ORDER BY TOTAL_PHYS_IO DESC) WHERE ROWNUM <=10;
篇幅有限,主要分享几个sql 所以就介绍到这了,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~