oracle执行计划学习文档.docVIP

  • 0
  • 0
  • 约1.62万字
  • 约 16页
  • 2024-03-23 发布于江苏
  • 举报

oracle执行计划学习文档

Oracle执行SQL的步骤

SQL语句的两种类型

DDL语句,不共享,每次执行硬解析;

DML语句,会共享,硬解析或者软解析。

SQL执行步骤

1、语法检测。判断一条SQL语句的语法是否符合SQL的规范;

2、语义检查。语法正确的SQL语句在解析的第二个步骤就是判断该SQL语句所访问的表及列是否准确?用户是否有权限访问或更改相应的表或列?

3、检查共享池中是否有相同的语句存在。假如执行的SQL语句已经在共享池中存在同样的副本,那么该SQL语句将会被软解析,也就是可以重用已解析过的语句的执行计划和优化方案,可以忽略语句解析过程中最耗费资源的步骤,这也是我们为什么一直强调避免硬解析的原因。这个步骤又可以分为两个步骤:

(1)验证SQL语句是否完全一致。

(2)验证SQL语句执行环境是否相同。比如同样一条SQL语句,一个查询会话加了/*+first_rows*/的HINT,另外一个用户加/*+all_rows*/的HINT,他们就会产生不同的执行计划,尽管他们是查询同样的数据。

通过如上三个步骤检查以后,如果SQL语句是一致的,那么就会重用原有SQL语句的执行计划和优化方案,也就是我们通常所说的软解析。如果SQL语句没有找到同样的副本,那么就需要进行硬解析了。

4、Oracle根据提交的SQL语句再查询相应的数据对象是否有统计信息。如果有统计信息的话,那么CBO将会使用这些统计信息产生所有可能的执行计划(可能多达成千上万个)和相应的Cost,最终选择Cost最低的那个执行计划。如果查询的数据对象无统计信息,则按RBO的默认规则选择相应的执行计划。这个步骤也是解析中最耗费资源的,因此我们应该极力避免硬解析的产生。至此,解析的步骤已经全部完成,Oracle将会根据解析产生的执行计划执行SQL语句和提取相应的数据。

优化器介绍

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。

Oracle目前提供RBO和CBO两种优化器。

2.1RBO(RULE-BASEOptimization)基于规则的优化器

RBO的执行路径和等级:

1、SingleRowbyRowid(等级最高)

2、SingleRowbyClusterJoin

3、SingleRowbyHashClusterKeywithUniqueorPrimaryKey

4、SingleRowbyUniqueorPrimaryKey

5、ClusteredJoin

6、HashClusterKey

7、IndexedClusterKey

8、CompositeIndex

9、Single-ColumnIndexes

10、BoundedRangeSearchonIndexedColumns

11、UnboundedRangeSearchonIndexedColumns

12、SortMergeJoin

13、MAXorMINofIndexedColumn

14、ORDERBYonIndexedColumn

15、FullTableScan(等级最低)

优化器根据上述等级优先选择高效的执行路径,以上涉及到的概念在后面详细分析。

2.2CBO(COST-BASEOptimization)基于代价的优化器

Oracle把一个代价引擎集成在数据库内核,用来估计每个执行计划的代价,并量化执行计划所耗费资源,从而选择选择最优的执行计划,查询耗费资源分为以下三种。

I/0代价,即从磁盘读数据到内存的代价,从数据文件中数据块的内容读取到SGA数据高速缓存中,这是数据访问最主要的代价,故优化原则一般以降低查询产生的I/0次数为主;

CPU代价,即处理在内存中数据所需代价,如对数据进行排序(sort)或者连接(join)操作等;

NetWork代价,对访问跨服务器数据库的数据,需要花费的传输操作耗费的资源。

CBO方式通过表和索引的统计数据计算出相对准确的代价,然后采用最佳的执行计划,所以定期对表和索引进行分析是非常必要的,否则得不偿失,关于数据分析技术详见第三章。

2.3优化器模式

Optimization-mode即优化器模式,可选值包括:

Rule,采用的是RBO;

CHOOSE,根据实际情况,如果数据字典中包含了引用表的统计数据,则

文档评论(0)

1亿VIP精品文档

相关文档