在实践中ORACLE数据库SQL物理读(即物理读大小)高会引发性能问题。

      物理读(Physical Reads)从磁盘读取数据块到内存的操作叫物理读,当SGA里的高速缓存(Cache Buffer)里面不存在这些数据块时,就会产生物理读,另外。像全表扫描、磁盘排序等操作也可能产生物理读,原因也是因为ORACLE数据库需要访问的数据块较多,而有些数据块不在内存当中,需要从磁盘读取。

     物理读的单位为数据库块,默认大小为8KB。

     通常相关指标为平均单次执行物理读不得大于500。

     SQL语句物理读高说明需大量从磁盘读取数据,很多情况下会出现性能问题。扫描大表时常容易出现。解决方案:分析SQL语句,优化SQL,创建合适的索引等。

      通过AWR报告可以查看物理读的情况:

查看物理读top10具体的sql情况:


SET LINESIZE 300;
SET PAGESIZE 300;
SET LONG 50000;
 
SELECT *
  FROM (  SELECT sql_fulltext AS sql,
                 SQL_ID,
                 disk_reads / executions AS "Reads/Exec",
                 disk_reads,
                 executions
            FROM V$SQLAREA
           WHERE disk_reads > 1000
        ORDER BY "Reads/Exec" DESC)
 WHERE ROWNUM <= 10;

更多内容请关注公众号“测试小号等闲之辈” ~

 

更多推荐