SQL语句的执行过程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
拓明科技Oracle数据库内部培训资料
所有DML语句第一次提交给Oracle时,在它们的生存期中至少要优化 一次。优化发生在硬分析中。语句义上和语法上完全相同,且执行环 境也相同的语句的执行可以利用以前硬分析的工作。在此情形下,对 它们进行软分析。
硬分析包括查询优化步骤。这是一种费劲的、CPU密集型的处理过程, 所花的时间可能比语句的实际执行时间还要长。
拓明科技Oracle数据库内部培训资料
共享池概念是Oracle体系结构的一个关键成分。共享池是Oracle共享 全局区(SGA)中的一块内存,其中库高速缓存区存放以前执行过的 SQL语句、PL/SQL代码,数据字典高速缓存区存放字典信息
硬分析 软分析
拓明科技Oracle数据库内部培训资料
分析查询 检查语法 验证语义 计算散列值 找到一个匹配 验证存在一个与我们的查询完全相同的查询(引用相同的对象) 确认我们具有访问所有引用对象的必须的权限 验证语句在相同的环Βιβλιοθήκη Baidu中执行 如果是软分析就直接跳过下面的优化和行资源生成这一重要步骤
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数据库内部培训资料
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call
count
cpu elapsed
disk
query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
查询优化工作是要找到可能是最好的执行计划
拓明科技Oracle数据库内部培训资料
基于规则的优化程序(RBO)
这种优化程序基于一组规则建立查询计划。它不考虑对象尺寸、列的基数、数据的分布、 排序区尺寸以及其它因素。查询优化只能利用已经编好的规则。
基于成本的优化程序(CBO)
这种优化程序根据收集的实际访问数据的统计信息对查询进行优化。在确定最合适的计划 是,它将使用行数、数据集的尺寸以及许多其他信息。CBO将生成许多(或许数千) 可能的查询计划(解决查询的预备途径),并给每个查询计划赋予一个数值成本。采 用具有最低成本的查询计划
拓明科技Oracle数据库内部培训资料
10:34:55 SQL> select * from dept;
Elapsed: 00:00:00.10
Execution Plan ---------------------------------------------------------Plan hash value: 3383998547
SQL语句的执行过程
路漫漫其悠远
拓明科技Oracle数据库内部培训资料
DDL(数据定义语言) DML(数据操纵语言)
拓明科技Oracle数据库内部培训资料
修改Oracle数据字典所执行的语句。它们是创建表、 增加用户、删除表中的列、创建触发器等的语句
例如: CREATE TABLE、CREATE USER、CREATE PACKAGE、ALTER TABLE、CREATE PROCEDURE
--------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
total
4880
0.93
0.98
0
7973
29
72696
count:提供OCI过程的执行次数 CPU: 提供执行CPU所花的时间单位是秒 Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间 Disk:提供缓存区从磁盘读取的次数 Query:以一致性模式从缓存区获得数据的次数 Current:以当前模式从缓存区获得数据的次数 ROWs: 返回调用或执行调用时,处理的数据行的数量。
拓明科技Oracle数据库内部培训资料
语法分析
查询是不是合法的语句
语义分析
如果是合法的语句,还需要检查是否具有访问权限、访问的列是否在所 访问的表中、是否存在歧义
共享池检查
如果是DML语句还需要进行共享池检查,此语句是否已经被其他用户分 析过且Oracle可重用已经执行的工作,如果是就进行软分析,如果不 是就进行硬分析。DDL总是硬分析,从不重用
拓明科技Oracle数据库内部培训资料
访问和修改数据库中数据所执行的语句。这些语句 包括SELECT、INSERT、MERGE、UPDATE和 DELETE命令
拓明科技Oracle数据库内部培训资料
Oracle执行一条语句从开始到结束经过4个步骤: 分析 对提交的语句进行语法和语义检查 优化 生成一个可在数据库中用来执行语句的最佳计划 行资源生成 为会话取得最佳计划和建立执行计划 语句执行 完成实际执行查询的行资源生成步骤的输出
拓明科技Oracle数据库内部培训资料
优化之后就是行资源生成,行资源生成器是Oracle中的一个软件,它 接受优化程序的输出,将它格式化为实际的执行计划。
例如:在使用SQL*PLUS中的AUTOTRACE实用程序时,它打印查询计 划
拓明科技Oracle数据库内部培训资料
语句执行的最后步骤是利用资源生成器的输出实际执行语句。它是 DML执行中唯一的强制性的步骤。可以跳过分析、优化和行资源生成 步骤。反复执行语句。因为这是目前为止最高效的方法,只要有可能, 我们都希望建立符合“分析一次,执行许多次”规则的应用程序。
所有DML语句第一次提交给Oracle时,在它们的生存期中至少要优化 一次。优化发生在硬分析中。语句义上和语法上完全相同,且执行环 境也相同的语句的执行可以利用以前硬分析的工作。在此情形下,对 它们进行软分析。
硬分析包括查询优化步骤。这是一种费劲的、CPU密集型的处理过程, 所花的时间可能比语句的实际执行时间还要长。
拓明科技Oracle数据库内部培训资料
共享池概念是Oracle体系结构的一个关键成分。共享池是Oracle共享 全局区(SGA)中的一块内存,其中库高速缓存区存放以前执行过的 SQL语句、PL/SQL代码,数据字典高速缓存区存放字典信息
硬分析 软分析
拓明科技Oracle数据库内部培训资料
分析查询 检查语法 验证语义 计算散列值 找到一个匹配 验证存在一个与我们的查询完全相同的查询(引用相同的对象) 确认我们具有访问所有引用对象的必须的权限 验证语句在相同的环Βιβλιοθήκη Baidu中执行 如果是软分析就直接跳过下面的优化和行资源生成这一重要步骤
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数据库内部培训资料
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call
count
cpu elapsed
disk
query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
查询优化工作是要找到可能是最好的执行计划
拓明科技Oracle数据库内部培训资料
基于规则的优化程序(RBO)
这种优化程序基于一组规则建立查询计划。它不考虑对象尺寸、列的基数、数据的分布、 排序区尺寸以及其它因素。查询优化只能利用已经编好的规则。
基于成本的优化程序(CBO)
这种优化程序根据收集的实际访问数据的统计信息对查询进行优化。在确定最合适的计划 是,它将使用行数、数据集的尺寸以及许多其他信息。CBO将生成许多(或许数千) 可能的查询计划(解决查询的预备途径),并给每个查询计划赋予一个数值成本。采 用具有最低成本的查询计划
拓明科技Oracle数据库内部培训资料
10:34:55 SQL> select * from dept;
Elapsed: 00:00:00.10
Execution Plan ---------------------------------------------------------Plan hash value: 3383998547
SQL语句的执行过程
路漫漫其悠远
拓明科技Oracle数据库内部培训资料
DDL(数据定义语言) DML(数据操纵语言)
拓明科技Oracle数据库内部培训资料
修改Oracle数据字典所执行的语句。它们是创建表、 增加用户、删除表中的列、创建触发器等的语句
例如: CREATE TABLE、CREATE USER、CREATE PACKAGE、ALTER TABLE、CREATE PROCEDURE
--------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
total
4880
0.93
0.98
0
7973
29
72696
count:提供OCI过程的执行次数 CPU: 提供执行CPU所花的时间单位是秒 Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间 Disk:提供缓存区从磁盘读取的次数 Query:以一致性模式从缓存区获得数据的次数 Current:以当前模式从缓存区获得数据的次数 ROWs: 返回调用或执行调用时,处理的数据行的数量。
拓明科技Oracle数据库内部培训资料
语法分析
查询是不是合法的语句
语义分析
如果是合法的语句,还需要检查是否具有访问权限、访问的列是否在所 访问的表中、是否存在歧义
共享池检查
如果是DML语句还需要进行共享池检查,此语句是否已经被其他用户分 析过且Oracle可重用已经执行的工作,如果是就进行软分析,如果不 是就进行硬分析。DDL总是硬分析,从不重用
拓明科技Oracle数据库内部培训资料
访问和修改数据库中数据所执行的语句。这些语句 包括SELECT、INSERT、MERGE、UPDATE和 DELETE命令
拓明科技Oracle数据库内部培训资料
Oracle执行一条语句从开始到结束经过4个步骤: 分析 对提交的语句进行语法和语义检查 优化 生成一个可在数据库中用来执行语句的最佳计划 行资源生成 为会话取得最佳计划和建立执行计划 语句执行 完成实际执行查询的行资源生成步骤的输出
拓明科技Oracle数据库内部培训资料
优化之后就是行资源生成,行资源生成器是Oracle中的一个软件,它 接受优化程序的输出,将它格式化为实际的执行计划。
例如:在使用SQL*PLUS中的AUTOTRACE实用程序时,它打印查询计 划
拓明科技Oracle数据库内部培训资料
语句执行的最后步骤是利用资源生成器的输出实际执行语句。它是 DML执行中唯一的强制性的步骤。可以跳过分析、优化和行资源生成 步骤。反复执行语句。因为这是目前为止最高效的方法,只要有可能, 我们都希望建立符合“分析一次,执行许多次”规则的应用程序。