在实践中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;
更多内容请关注公众号“测试小号等闲之辈” ~