一、执行计划核心机制
1.生成原理
查询优化器基于代价模型,分析数据分布统计信息、表索引特征及硬件资源,生成多种候选执行计划,选择代价最小的作为最终计划。
支持自适应机制(OPTIMIZER_MODE=1时),复杂子查询节点会生成备用计划,运行时根据实际数据选择最优路径。
2.查看方式
基础查看:EXPLAIN SELECT...显示树形执行计划
增强查看:EXPLAIN FOR SELECT...以结果集形式输出,含分区信息、索引建议等
实时跟踪(需开启统计参数):
SET AUTOTRACE TRACEONLY; -- 执行SQL并显示计划及统计
二、执行计划组成要素
1.关键操作符:
CSCN2:聚集索引全扫描
SSEK2:二级索引范围扫描
NEST LOOP JOIN2:嵌套循环连接
HASH2 JOIN:哈希连接
AAGR2:基于排序的聚合计算
MPP COLLECT:分布式数据收集节点
2.代价标识
示例:[0, 16, 9]表示:
估算代价:0级
处理行数:16行
行均字节:9字节
三、执行计划分析维度
1.数据访问路径优化
全表扫描 vs 索引选择
BLKUP2操作符出现表示需要回表,可通过覆盖索引优化
2.连接策略选择
10万级以下数据量优先NESTED LOOP
大数据量优先HASH JOIN
分布式场景采用MPP GATHER/DISTRIBUTE策略
3.分布式计划特征
计划中会出现MPP COLLECT/MPP GATHER等分布式操作符
支持动态分区裁剪,通过V$DPC_EXA_INFO可监控子任务执行
四、调优工具与方法
1.统计信息管理
DBMS_STATS.GATHER_TABLE_STATS('SYSDBA','T1'); -- 收集统计信息
2.性能视图:
V$SQL_PLAN:当前缓存的执行计划
V$SQL_NODE_HISTORY:历史执行节点耗时
V$SQL_STAT:SQL执行统计监控
3.HINT强制干预
SELECT /*+ INDEX(T1 IDX_NAME) */ * FROM T1 WHERE ...; -- 强制使用索引
五、特殊场景处理
1.并行查询
参数设置:
ALTER SESSION SET PARALLEL_POLICY=2; -- 手动并行模式
ALTER SESSION SET PARALLEL_THRD_NUM=8; -- 并行线程数
自动并行度根据数据量动态调整
2.结果集重用
通过USE_PLN_POOL参数启用计划缓存
V$CACHEPLN视图查看缓存计划命中率
六、维护
1.定期更新统计信息,避免过时统计导致错误代价估算
2.OLTP系统关注索引有效性,OLAP系统关注连接顺序优化
3.复杂查询使用DBMS_SQLTUNE进行自动SQL调优
文章
阅读量
获赞