1 查询优化
目标:降低响应速度,提高吞吐量
查询的执行步骤:
npar语法分析->
(计划优化)pha语义分析->phb关系树生成->phc逻辑计划优化->phd物理计划生成->rt运行时计划生成->
(执行优化)vm物理计划执行
1.1 计划优化
1.1.1 查询改写
优化时机:pha/phb。规则优化,常用于视图合并(条件下放)、OR过滤条件转换、子查询
举例:
1) where c1 = d1 and d1 = 5 and c1 < 2;
->
where FALSE;
2) t1 left join t2
on t1.c1 = t2.d1
where t2.d2 < 5
->
inner join
3) t1是基于id列的范围分区, min(id), max(id)
-> 转换为第一个/最后一个子表的查询;
4) select c1,c2...
from t1
where b1
order by ... limit 10, 1;
->
where rowid in
(select rowid from t1
where b1
order by ... limit 10,1);
1.1.2 代价估算与统计信息
对单表过滤:定位查找、索引扫描
对多表连接:连接顺序、连接方式(哈希连接、归并连接、嵌套循环连接和索引连接)
影响代价的因素:
- cardinality、byte length(页大小、页数、聚簇因子)
- 操作符类型
- 参数配置
- statistics
2 调优手段
1、问题重现(排除第三方应用、驱动、网络、磁盘)
2、定位
ENABLE_MONITOR、MONITOR_TIME、MONITOR_SQL_EXEC开启时, set autotrace trace
select \* from v$bufferpool ; -- 在待调优语句前后执行以确认有无IO
select \* from v$mtab_used_history;
select \* from v$sort_history;* -- 确认有无刷盘
select \* from v$sql_node_history; -- 查看每个操作符用时, 或者用et()
3、优化手段
- 建索引、更新统计信息;
- 增加hint或者修改ini参数,期望得到不同的计划(几十个优化参数的应用);
- 语句改写,基于应用逻辑;
- 修改代码,增加新的优化;