当前位置:文档之家› Oracle优化之执行计划解析

Oracle优化之执行计划解析

Oracle优化之执行计划解析
用友软件股份有限公司 林世福
2013年 9 月 25日
应用优化的重要性认识
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
SQL语句的解析过程
1 语法分析 分析语句的语法是否符合规范,衡量语句中各 表达式的意义。 2 语义分析 检查语句中涉及的所有数据库对象是否存在,及 用户权限。 3 视图转换 将涉及视图的查询语句转换为相应的对基表查 询语句。 4 表达式转换 将复杂的SQL表达式转换为较简单的等效连 接表达式。 5 选择优化器 不同的优化器一般产生不同的“执行计划”
数据量大的不同的结果集进行连接,较小的结果集作为驱动表,创建 基于内存的Hash table,大的结果集计算hash value,然后在内存中进 行匹配。
较小的结果集的大小接近hash_area_size,即较小的结果集一次性加载 到内存中
表连接算法
外表(驱动表)
内表
Nested Loop (嵌套循环)
成本优化策略演化
• 传统的:仅仅计算读取请求的数目 • 系统统计(1):说明读取的大小和时间 • 系统统计(2):说明CPU成本以及读取请求的大小和时间 • 系统统计(3): 说明缓存、CPU成本以及读取请求的大小
和时间
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
如何解读执行计划
执行计划阅读方法 执行方法描述 术语解释
执行计划阅读方法
以树状格式进行读取,通过递归进入最底层 ,然后再返回该树的父(第一)。
实际演示
执行方法描述
数据扫描方式 表连接算法
数据扫描方式
表扫描
1).全表扫描(Full Table Scans, FTS) 2).通过ROWID的表存取(Table Access by ROWID )
执行方法描述
数据扫描方式 表连接算法

较小的建立Hash表 较大的计算Hash值 探测Hash表 优点:ora10G后默 认的连接方式,相 当于对两张表分别 扫描一次。
Hash Table
row1 row2
… … rowm
ram
key1 … … keyn
表连接
索引扫描
1).索引唯一扫描(index unique scan) 2).索引范围扫描(index range scan) 3).索引快速扫描(index fast full scan)
全表扫描
对于全表扫描,Oracle将顺序读取请求段中的所有数据块 对于返回大量数据查询尤其有效 可以避免由于索引访问带来的额外I/O 可以通过多块访问(db_file_multiblock_read_count) 全表扫描访问HWM下的所有数据块
Index访问
通过索引访问获得rowid 进而通过rowid访问获取数据所在位置 通过单块I/O读取 Rowid是访问单行的最快的方法
ROWID的格式如下(6位对象号,3位文件号,6位块号,3 位行号)
例子:AAABqHAADAAAC7EAAA 数据对象编号 文件编号 块编号 行编号 OOOOOO FFF BBBBBB RRR

6. Hash cluster key 7. Indexed cluster key

8. Composite key

9. Single-column non-unique index

10. Bounded range search on indexed columns 11. Unbounded range search on indexed columns
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
了解RBO和CBO
什么是RBO 和CBO
Oracle的优化规则,主要有 (RBO, RULE-Based Optimizer基于内在规则) (CBO, Cost-Based Optimizer 基于成本)
当两个table都有index时,选择结果集较小的table作为 驱动表 (CBO/RBO的区别);
1 5
1 2
4
3
3
4
双重for逐行循 环
7
5

外层数据小,内层被连接的字段已建 索引,且内层数据量大; 比如select * from bd_corp c inner join ic_general_h h on
c.pk_corp=h.pk_corp
表连接
必须有一个table拥有index;
只用一个table有index时,选择没有index的table作为驱 动表;
RBO的规则
1. Single row by ROWID
2. Single row by cluster join
3. Single row by hash cluster key with unique key
4. Single row by unique index

5. Cluster join
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
什么是SQL执行计划
所谓执行计划,就是对一个DML SQL做出一份怎样去 完成任务的执行路径。基于不同的优化方式,执行计划可能 有很大的差异。
什么是SQL执行计划
Oracle应用优化
SQL语句的解析过程
6 选择连接方式 对多表连接ORACLE可选择适当的连接方 式。 7 选择连接顺序 对多表连接ORACLE选择哪一对表先连接 ,选择这两表中哪个表做为驱动表。 8 选择数据的搜索路径 根据以上条件选择合适的数据搜索 路径,如是选用全表搜索还是利用索引或是其他的方式。 9 产生“执行计划” 并执行。

12. Sort-merge join
13. MAX or MIN of indexed column
14. ORDER BY on indexed columns
15. Full table-scan
CBO的规则
成本
指执行SQL语句导致的实际资源消耗;或者表示优化器对 执行语句所用时间的最优估计。
相关主题