SQL语句的执行过程
• 查询优化工作是要找到可能是最好的执行计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
优化程序模式
• 基于规则的优化程序(RBO)
这种优化程序基于一组规则建立查询计划。它不考虑对象尺寸、列的基数、数据的分布、排序 。查询优化只能利用已经编好的规则。
• 基于成本的优化程序(CBO)
SQL语句的执行过程
Hale Waihona Puke 路漫漫其修远兮, 吾将上下而求索
2020年4月9日星期四
♦ SQL语句的执行过程 ♦ 数据库的内存结构
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
SQL语句的类型
• DDL(数据定义语言) • DML(数据操纵语言)
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
硬分析和软分析
• 分析查询 • 检查语法 • 验证语义 • 计算散列值 • 找到一个匹配 • 验证存在一个与我们的查询完全相同的查询(引用相同的对象) • 确认我们具有访问所有引用对象的必须的权限 • 验证语句在相同的环境中执行 如果是软分析就直接跳过下面的优化和行资源生成这一重要步骤
路漫漫其修远兮, 吾将上下而求索
DDL(数据定义语言)
• 修改Oracle数据字典所执行的语句。它们是创建表、 删除表中的列、创建触发器等的语句
例如: CREATE TABLE、CREATE USER、CREATE PACKAGE、ALT CREATE PROCEDURE
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
共享池检查
• 共享池概念是Oracle体系结构的一个关键成分。共享池是Oracle共享全局区 块内存,其中库高速缓存区存放以前执行过的SQL语句、PL/SQL代码,数 存放字典信息
硬分析 软分析
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
分析
• 语法分析
查询是不是合法的语句
• 语义分析
如果是合法的语句,还需要检查是否具有访问权限、访问的列是否在所访问 在歧义
• 共享池检查
如果是DML语句还需要进行共享池检查,此语句是否已经被其他用户分析过 经执行的工作,如果是就进行软分析,如果不是就进行硬分析。DDL总是
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
• OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
• call count
cpu elapsed
disk
query current
rows
• ------- ------ -------- ---------- ---------- ---------- ---------- ----------
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
10:34:55 SQL> select * from dept;
Elapsed: 00:00:00.10
Execution Plan ---------------------------------------------------------Plan hash value: 3383998547
拓明科技Oracle数据库内部培训资料
优化和行资源生成
• 所有DML语句第一次提交给Oracle时,在它们的生存期中至少要优化一次 析中。语句义上和语法上完全相同,且执行环境也相同的语句的执行可以 的工作。在此情形下,对它们进行软分析。
• 硬分析包括查询优化步骤。这是一种费劲的、CPU密集型的处理过程,所 句的实际执行时间还要长。
• total 4880
0.93
0.98
0
7973
29
72696
• count:提供OCI过程的执行次数 • CPU: 提供执行CPU所花的时间单位是秒 • Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间 • Disk:提供缓存区从磁盘读取的次数 • Query:以一致性模式从缓存区获得数据的次数 • Current:以当前模式从缓存区获得数据的次数 • ROWs: 返回调用或执行调用时,处理的数据行的数量。
DML(数据操纵语言)
• 访问和修改数据库中数据所执行的语句。这些语句包 INSERT、MERGE、UPDATE和DELETE命令
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
语句执行过程
• Oracle执行一条语句从开始到结束经过4个步骤: 分析 对提交的语句进行语法和语义检查 优化 生成一个可在数据库中用来执行语句的最佳计划 行资源生成 为会话取得最佳计划和建立执行计划 语句执行 完成实际执行查询的行资源生成步骤的输出
这种优化程序根据收集的实际访问数据的统计信息对查询进行优化。在确定最合适的计划是, 集的尺寸以及许多其他信息。CBO将生成许多(或许数千)可能的查询计划(解决查询的预 查询计划赋予一个数值成本。采用具有最低成本的查询计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
行资源生成
• Parse
12
0.04
0.12
0
2
0
0
• Execute 12
0.02
0.04
0
268
29
23
• Fetch 4856
0.86
0.81
0
7703
0
72673
• ------- ------ -------- ---------- ---------- ---------- ---------- ----------
• 优化之后就是行资源生成,行资源生成器是Oracle中的一个软件,它接受 将它格式化为实际的执行计划。
例如:在使用SQL*PLUS中的AUTOTRACE实用程序时,它打印查询计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
执行
• 语句执行的最后步骤是利用资源生成器的输出实际执行语句。它是DML执 性的步骤。可以跳过分析、优化和行资源生成步骤。反复执行语句。因为 高效的方法,只要有可能,我们都希望建立符合“分析一次,执行许多次 序。