暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle性能优化:SQL优化思路之二十——返回行与逻辑读比率

oracleEDU 2017-11-15
570

如何识别低效的执行计划,关注执行计划中的真实返回值与产生逻辑的的比例。一般而言,每获取一行,开销5个以下的逻辑读是属于基本比较满意的。

关键字

BUFERS/A-ROWS     (statistics_level方法)

consistent gets/rows processed    (autotrace 方法)

测试环境

SQL> drop table t purge;

SQL> CREATE TABLE t as select * from dba_objects;

案例1

用statitics_level=all获取执行计划的方式,发现获取1条记录(A-ROWS),却产生1048次逻辑读(Buffers)。

SQL> alter session set statistics_level=all;

SQL> set linesize 1000

SQL> set pagesize 200

SQL> select * from t where object_id=6;

SQL> SELECT * FROM SQL> table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));

要获取一条记录,产生了1048次逻辑读(Buffers),非常多啊。

案例2

改用autotrace 获取执行计划,发现获取1条记录(1 rows processed),竟产生1048次逻辑读(1048 consistent gets)。

SQL> set autotrace traceonly

SQL> select * from t where object_id=6;

总共获取1条记录(1  rows processed),产生1048次逻辑读(1048  consistent gets)。

案例3

增加索引后,发现获取1条记录(1 rows processed),产生4次逻辑读(4 consistent gets),比较满意。

SQL> CREATE INDEX idx ON t (object_id);

SQL> set autotrace traceonly

SQL> select * from t where object_id=6;

添加索引后,一条记录,4条逻辑读,正常比率。

最后修改时间:2021-04-28 20:28:58
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论