Oracle 执行计划的获取
Oracle 执行计划的获取
无论是 DBA 还是开发者,我们都需要掌握一些调优手段来帮助快速解决 SQL 性能问题,
执行计划是 SQL 调优的重要手段,
获取执行计划有多种方式, 常用的有以下几种:
1: plsql developer 工具 F5
1: 在 sqldeveloper 中选中 sql 按 F5 即可查看执行计划
2: statistics_level=all
1. 执行语句,设置 statistics_level
alter session set statistics_level= 'ALL';
2. 运行 sql,查找对应的 SQL_ID
运行 sql 时可以加一些注释,方便查找
select * from v$sqlarea where sql_text like '%umpp0521%' ;
3. 执行以下 SQL 获取执行计划
select * from table (dbms_xplan.display_cursor( '&sql_id' , null , 'allstats last' ));
关键字解读:
Starts:该 sql 执行的次数。
E-Rows:执行计划预估的行数。
A-Rows:实际返回的行数。A-Rows 跟 E-Rows 做比较,可以确定哪一步执行计划出问题。
A-Time:每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该 sql 耗时在了哪个地方。
Buffers:每一步实际执行的逻辑读或一致性读。
Reads:物理读。
优点:可以清晰看出来表被访问多少次;有详细的 E-Rows 和 A-Rows 中得到预测的行数和真实的行数;从 Buffers 中看真实的逻辑读
3: dbms_xplan.display_cursor(‘&sql_id’)
1. 获取到 sql_id
2. 执行查询 SQL
select * from table (dbms_xplan.display_cursor( '&sqlId' ));
优点:不用执行 SQL,只需要知道 SQL_ID; 真实的执行计划;
缺点:没有相关统计信息;没办法看到表被访问多少次;没办法看到处理多少行