<返回更多

如何查看Oracle数据库物理读、逻辑读前10的sql?

2019-09-16    
加入收藏

概述

今天主要介绍几个sql,可能很多人就收藏一下但很少会去用,所以结合案例来做一下分析,这样就知道在什么场景用了。

下面介绍一下案例。


1、监控分析

从监控发现物理IO读处于比较高的水平,截图如下:物理读基本保持在几十M,物理写很少。

如何查看Oracle数据库物理读、逻辑读前10的sql?

 

2、观察AWR报告

这里拿了对应的awr报告,简单看下逻辑读和物理读情况。

如何查看Oracle数据库物理读、逻辑读前10的sql?

 

从这个截图我们只计算下逻辑读和物理读:

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的汇总。
如何查看Oracle数据库物理读、逻辑读前10的sql?

 


物理读(磁盘读写)前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;
如何查看Oracle数据库物理读、逻辑读前10的sql?

 


物理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;
如何查看Oracle数据库物理读、逻辑读前10的sql?
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>