刍议oracle数据库sql逻辑读高性能问题

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

      通常相关指标为平均单次执行逻辑读不得大于2000。

逻辑读(Logical Reads)

     概念1:逻辑读指ORACLE从内存读到的数据块数量。一般来说, logical reads = db block gets + consistent gets

      概念2:逻辑读指的就是从Buffer Cache中读取数据块。按照访问数据块的模式不同,可以分为当前模式读(Current Read)和一致性读(Consistent Read)。 

      这两个概念本质是一样的,只是措辞不一样。

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

     通过逻辑读可以计算出数据读取量。比如,SQL单次逻辑读为1024,那么,其数据读取量则为1024 * 8KB=8MB。

     SQL语句不得逻辑读高,SQL语句逻辑读高很多情况下会出现性能问题,逻辑读高会引发数据库CPU资源使用率上升。产生高逻辑读的原因有:未创建索引、索引设计不佳、SQL语句写法存在问题等。

解决方案:

1、确认数据库参数是否设置合理。Sga、db_cache_size。

2、分析SQL语句,优化SQL,创建合适的索引。

3、存在索引的情况,确认谓词覆盖的范围。覆盖条件大,造成索引覆盖较多的range、fast full scan等查询计划,均可能造成逻辑读高。

查看逻辑读前10的SQL:

代码如下: 
set linesize 300;
set pagesize 300;
set long 50000;
SELECT *
FROM (
SELECT sql_fulltext AS sql, SQL_ID,buffer_gets / executions AS "Gets/Exec",buffer_gets, executions
FROM V$SQLAREA
WHERE buffer_gets > 10000
ORDER BY "Gets/Exec" DESC
)
WHERE rownum <= 10;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值