Oracle 12C优化器的巨大变化,上生产必读(上)

合集下载

《高性能并行运行时系统:设计与实现》随笔

《高性能并行运行时系统:设计与实现》随笔

《高性能并行运行时系统:设计与实现》读书随笔目录一、内容综述 (2)1.1 背景与动机 (3)1.2 高性能并行运行时系统的意义 (3)二、并行运行时系统的基本概念 (4)2.1 并行计算与并行运行时系统 (6)2.2 并行运行时系统的组成部分 (7)三、高性能并行运行时系统的设计要素 (9)3.1 性能优化策略 (10)3.2 可扩展性与可维护性 (12)3.3 容错与稳定性 (13)四、典型高性能并行运行时系统分析 (15)4.1 MapReduce及其应用场景 (16)4.2 Spark的工作原理与应用 (17)4.3 分布式内存计算系统TBB (19)五、并行运行时系统的实现技术 (21)5.1 编程模型与语言支持 (22)5.2 数据存储与管理 (24)5.3 网络通信与通信协议 (25)六、高性能并行运行时系统的测试与调试 (27)6.1 测试方法与工具 (28)6.2 常见问题与解决方案 (30)七、总结与展望 (31)7.1 本书主要内容回顾 (32)7.2 对未来发展的展望 (34)一、内容综述《高性能并行运行时系统:设计与实现》是一本关于高性能并行计算的经典著作,作者是著名的计算机科学家和教授。

本书详细介绍了高性能并行运行时系统的设计与实现过程,旨在为读者提供一套完整的理论框架和技术方法,以便在实际项目中构建高效、可扩展的并行计算系统。

本书共分为五个部分,分别是:并行计算基础、并行编程模型、并行数据结构与算法、并行运行时系统设计及实例分析和总结。

在前三部分中,作者首先介绍了并行计算的基本概念、原理和技术,包括共享内存模型、消息传递接口(MPI)等;接着详细讲解了并行编程模型,如任务划分、同步与互斥、负载均衡等;作者还介绍了一些常用的并行数据结构与算法,如哈希表、B树、红黑树等。

在第四部分中,作者深入探讨了并行运行时系统的设计与实现,包括线程管理、进程管理、资源分配等方面。

通过一系列实例分析,作者展示了如何根据具体问题选择合适的并行计算模型和编程技术,以及如何在实际项目中实现高效的并行运行时系统。

ocp 082题库解析

ocp 082题库解析

ocp 082题库解析OCP 082 题库解析:1Z0-082 考试主要涵盖Oracle Database 12c和19c的相关知识。

以下是一些重点题库解析:1.不可用索引会自动删除segment:正确。

当索引不可用时,Oracle 数据库会自动删除相关的segment。

但请注意,如果索引分区后,某个分区的索引不可用,其他分区的索引仍然存在。

2.私有临时表:这个特性在Oracle 18c中引入。

私有临时表在创建时,仅当前会话的用户可以访问。

当会话结束时,表会被自动删除。

3.数据库性能优化:要优化数据库性能,可以采用以下方法:a. 合理设计表结构和索引。

b. 调整SQL语句,避免使用子查询和多表连接。

c. 调整数据库参数,如缓存大小、日志文件大小等。

d. 监控和分析数据库性能,根据性能报告进行优化。

4.备份和恢复:Oracle数据库支持热备份和冷备份。

热备份可以在数据库运行时进行,而冷备份需要在数据库关闭时进行。

备份策略可以根据业务需求和数据重要性进行选择。

5.RMAN(远程备份管理器):RMAN是Oracle数据库备份和恢复的核心工具。

它可以用于全备份、增量备份、归档日志备份等。

同时,R MAN还可以用于数据库的恢复,如实例恢复、介质恢复等。

6.数据泵:Oracle数据泵是一种用于在Oracle数据库之间传输数据的技术。

它可以实现批量传输、实时传输和全表传输等。

数据泵的使用可以提高数据迁移的效率和可靠性。

7.自动化管理:Oracle数据库提供了自动化管理功能,如自动备份、自动监控、自动扩容等。

这些功能可以帮助数据库管理员更高效地管理数据库,降低运维成本。

总结:OCP 082题库主要考察Oracle数据库的基本概念、管理和优化技术。

要顺利通过考试,需要对Oracle数据库的各个层面有一定了解,并掌握相关的管理和优化工具。

在备考过程中,多做题库练习,了解考试重点和难点,提高自己的实际操作能力。

优化器模式optimizer_mode

优化器模式optimizer_mode

优化器模式optimizer_modeoracle的optimizer_mode参数说明:Syntax OPTIMIZER_MODE ={ first_rows_[1 | 10 | 100 | 1000] | first_rows | all_rows }Default value all_rows在oracle中,sql语句优化分成RBO(Rule-Based Optimization)基于规则的优化和CBO(Cost-Based Optimization)基于代价的优化。

在较早的oracle的版本中,oracle是采取基于规则的优化,根据oracle指定的规则优先顺序,对于指定的表进⾏执⾏计划的选择。

⽐如在规则中,索引的优先级⼤于全表扫描,那在查询某张拥有所有的表的时候,那就⼀定是使⽤索引。

在后来,oracle发现这样的做法并不科学,规则是死的,数据是活的,并不是说在所有的情况下使⽤规则都是可⾏的。

于是oracle开始推出了基于代价的优化,收集对象的统计信息并分析得出最优的执⾏计划。

从oracle9i开始,oracle就强烈建议使⽤CBO,这点从oracle10g和oracle11g的⽂档中关于优化参数optimizer_mode完全不提与RBO有关的⼏个选项就可以看出。

(有⼈说CBO考虑的代价主要是cpu和内存,这点不太赞同,在sql执⾏中,我们最需要考虑的⼀定是和io有关的部分,所以考虑的⽅向应该是逻辑读。

在下⾯的⼀个测试例⼦中可以看出RBO和CBO的⼀些区别)optimizer_mode决定了oracle使⽤RBO还是CBO,可选值如下:Choose:这是RBO和CBO“中间”的⼀种模式,具体是这样:1.当所包含的所有对象有统计信息时,那就是⽤CBO的优化⽅式。

2.当所包含的部分对象有统计信息时,也使⽤CBO的⽅式,并且对剩下的对象的统计信息进⾏“猜测”。

3.如果包含所有对象都没有统计信息时,使⽤RBO的⽅式。

Oracle数据库参数优化

Oracle数据库参数优化

千里之行,始于足下。

Oracle数据库参数优化Oracle数据库参数优化是指通过调整数据库的配置参数,提高数据库的性能和稳定性。

下面是一些常见的Oracle数据库参数优化技巧:1. SGA参数优化:- 调整sga_target参数以控制SGA的大小。

SGA包括数据库缓冲区、共享池、重做日志缓冲区等,适当调整SGA的大小可以减少IO操作,提高数据库性能。

- 调整db_cache_size参数以增大数据库缓冲区的大小,提高数据块的访问速度。

- 调整shared_pool_size参数以增大共享池的大小,提高SQL语句的解析和执行效率。

2. PGA参数优化:- 调整pga_aggregate_target参数以控制PGA的大小。

PGA是用于处理SQL查询和排序的内存区域,适当调整PGA的大小可以减少磁盘IO操作,提高查询和排序的性能。

3. Redo日志参数优化:- 调整log_buffer参数以增大重做日志缓冲区的大小,减少频繁的重做日志刷新操作,提高数据库的写入性能。

- 调整log_checkpoint_timeout参数以控制重做日志刷新的频率,避免过于频繁的刷新。

4. 并行处理参数优化:- 调整parallel_max_servers参数以增大并行处理的资源限制,提高并行查询和并行DML操作的性能。

第1页/共2页锲而不舍,金石可镂。

- 调整parallel_min_servers参数以设置最小的并行处理资源数,避免并行操作的启动延迟。

5. SQL优化:- 使用合适的索引和优化的SQL语句,优化查询的执行计划。

- 使用绑定变量而不是直接将参数传递到SQL语句中,避免SQL重解析,提高性能。

6. 服务器参数优化:- 调整processes参数以增加数据库的并发连接数。

- 调整sessions参数以控制数据库的最大会话数。

- 调整open_cursors参数以增大打开游标的数量,避免游标溢出。

以上是一些常见的Oracle数据库参数优化技巧,但具体的优化策略需要根据实际情况进行调整,可以参考Oracle官方文档和专业的DBA建议。

oracle 12c 参数

oracle 12c 参数

oracle 12c 参数Oracle 12c参数Oracle是一款非常强大的数据库管理软件,可以为企业提供高效稳定的数据管理支持。

Oracle数据库的运行需要众多参数的配合,针对每个参数的设置可以使得Oracle 的运行更加稳定、高效。

在Oracle 12c中,有大量的数据库参数需要进行设置,本文将介绍一些关键的参数设置方法。

1、SGA参数设置SGA是Oracle中非常重要的内存区域,被用于缓存数据和元数据,减少磁盘I/O。

通过调整SGA大小可以实现提高访问性能的目的。

可以使用下面的命令来查询SGA参数的值:SQL> show parameter sga可以通过编辑初始化文件ORACLE_HOME/dbs/initoradb.ora或使用ALTER SYSTEM语句在SGA参数或组件级别上设置SGA参数。

设置SGA最重要的是备份与恢复,为此可以将SGA的大小保存在PFILE 或SPFILE中,以便在备份与还原过程中使用。

SGA参数的设置包括:shared_pool_size:由SQL语句共享池的大小决定。

在高流量情况下,共享池的尺寸应适当增加以提高查询的效率。

db_cache_size:用于缓存数据块和索引块的缓冲池大小。

它决定了数据块的内存使用量。

large_pool_size:在执行如连接服务器,排序操作等任务时,处理多个连接的顶层堆栈使用的内存。

java_pool_size:用于Java等对象的内存池大小。

2、PGA参数设置Oracle数据库中的PGA(Process Global Area)是实现Oracle“进程内内存”概念的关键,它由每个进程的私有内存组成。

PGA存储了一个进程的全局变量信息,设计合理的PGA大小,可以使得Oracle各个进程的访问效率更高。

可以使用下面的命令来查询PGA参数的值:SQL> show parameter pga可以通过编辑初始化文件ORACLE_HOME/dbs/initoradb.ora或者使用ALTER SESSION 语句在针对性的设置PGA参数。

Oracle-BCT(Block Change Tracking)参数优化配置

Oracle-BCT(Block Change Tracking)参数优化配置

Oracle-BCT(Block Change Tracking)参数优化配置Oracle BCT(Block Change Tracking)是一个有用的功能,可以用来优化备份和恢复的时间。

使用BCT会减少备份和恢复所需的I/O操作和时间。

正确配置参数是确保BCT有效运行的关键。

以下是一些优化 Oracle BCT参数配置的建议。

1.开启BCT要启用BCT,必须运行以下命令:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; 如果BCT已经启用,该命令不会做任何事情。

2.配置BCT文件的位置BCT文件位于数据库的主目录中。

如果要改变BCT文件的位置,可以使用以下命令:ALTER DATABASE BACKUP CONTROLFILE TO'/new/path/to/bct_file';运行此命令将在新的目录结构中创建新的BCT文件。

3.监控BCT的大小默认情况下,BCT文件大小为10MB。

如果备份通常大于10MB,则应增加BCT文件的大小。

可以通过以下命令更改BCT文件的大小:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/path/to/new/bct/file' SIZE 50M;在此示例中,BCT文件的大小将增加到50MB。

4.启用增量备份启用增量备份可以利用BCT功能。

增量备份仅备份已更改的数据块,因此它比完全备份要快。

要启用增量备份,请运行以下命令:CONFIGURE BACKUP OPTIMIZATION ON;如果您想从增量备份中排除某些表,则可以使用以下命令:CONFIGURE BACKUP OPTIMIZATION OFF FOR TABLE schema.table1, schema.table2;5.启用快速恢复区快速恢复区是一个文件系统,可以用来存储备份。

Oracle Flash Accelerator F160 PCIe 卡用户指南说明书

Oracle Flash Accelerator F160 PCIe 卡用户指南说明书

目录
使用本文档 ........................................................................................................... 7 产品文档库 ................................................................................................... 7 反馈 ............................................................................................................. 8 更改历史记录 ................................................................................................ 8
本软件或硬件以及文档可能提供了访问第三方内容、产品和服务的方式或有关这些内容、产品和服务的信息。除非您与 Oracle 签订的相应协议另行规定,否则对于第 三方内容、产品和服务,Oracle Corporation 及其附属公司明确表示不承担任何种类的保证,亦不对其承担任何责任。除非您和 Oracle 签订的相应协议另行规定,否 则对于因访问或使用第三方内容、产品或服务所造成的任何损失、成本或损害,Oracle Corporation 及其附属公司概不负责。
准备 Oracle F160 闪存卡进行安装 ....................................................................... 19 ▼ 为安装做准备 ........................................................................................ 19 所需工具 ..................................................................................................... 20 产品套件物品 .............................................................................................. 20 遵循安全防范措施 ....................................................................................... 21 常规安全信息 ...................................................................................... 22 安全符号 ............................................................................................. 22 ESD 安全措施 ..................................................................................... 22 ▼ 执行 ESD 预防措施 ....................................................................... 23 Oracle Flash Accelerator F160 PCIe 卡优化准则 .......................................... 23 驱动器卷管理 .............................................................................................. 24 ▼ 将系统更新到最新软件发行版 ................................................................. 24

Oracle Database 12c十二大新特性

Oracle Database 12c十二大新特性

作为甲骨文全球大会OpenWorld 2012中的重要产品发布,新版Oracle Database 12c汇集了参会者最多的目光,Larry Ellison也在开幕演讲中重点介绍了12c 的一些新特性。

对于Oracle DBA来说,虽然数据库12c正式发布的日期还要等到明年年初,但依旧希望能够提前了解它的一些新功能、新特性。

在OpenWorld 2012的技术讲座环节,Oracle技术大师Tom Kyte集中介绍了Oracle Database 12c的十二大新特性,而Oracle ACE总监杨廷琨也对此进行了总结,希望让国内DBA一睹为快。

1.PL/SQL性能增强:类似在匿名块中定义过程,现在可以通过WITH语句在SQL中定义一个函数,采用这种方式可以提高SQL调用的性能。

2.改善Defaults:包括序列作为默认值;自增列;当明确插入NULL时指定默认值;METADATA-ONLY default值指的是增加一个新列时指定的默认值,和11g 中的区别在于,11g的default值要求NOT NULL列。

3.放宽多种数据类型长度限制:增加了VARCHAR2、NVARCHAR2和RAW类型的长度到32K,要求兼容性设置为12.0.0.0以上,且设置了初始化参数MAX_SQL_STRING_SIZE为EXTENDED,这个功能不支持CLUSTER表和索引组织表;最后这个功能并不是真正改变了VARCHAR2的限制,而是通过OUT OF LINE的CLOB 实现。

4.TOP N的语句实现:在SELECT语句中使用“FETCH next N rows”或者“OFFSET”,可以指定前N条或前百分之多少的记录。

5.行模式匹配:类似分析函数的功能,可以在行间进行匹配判断并进行计算。

在SQL中新的模式匹配语句是“match_recognize”。

6.分区改进:Oracle Database 12c中对分区功能做了较多的调整,Oracle ACE总监杨廷琨花了较大的篇幅对分区提升进行了解读,其中共分成6个部分:INTERVAL-REFERENCE分区:把11g的interval分区和reference分区结合,这样主表自动增加一个分区后,所有的子表、孙子表、重孙子表、重重重...孙子表都可以自动随着外接列新数据增加,自动创建新的分区。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 12C优化器的巨大变化,上生产必读(上)序言优化器是Oracle数据库最吸引人的部件之一,因为它对每一个SQL语句的处理都必不可少。

优化器为每个SQL语句确定最有效的执行计划,这是基于给定的查询的结构,可用的关于底层对象的统计信息,以及所有与优化器和执行相关的特性。

随着每个新版本的发布,优化器都会进化,利用新功能以及新的统计信息来生成更好的执行计划。

随着对查询优化的新的自适应方法的引入,Oracle 12c数据库把这种进化更推上了一个台阶。

这份白皮书介绍了在Oracle 12c数据库中与优化器和统计相关的所有新特性并且提供了简单的,可再现的例子,使得你能够更容易地熟悉它们。

它还概括了已有的功能是如何被增强以改善性能和易管理性。

优化器和统计信息新特性1、自适应查询优化到目前为止,Oracle 12c数据库中最大的变化是自适应查询优化。

自适应查询优化是这样的一组功能,它使得优化器能够对执行计划进行实时调整,并且发现能够导致更佳的统计信息的额外信息。

当现有的统计信息不足以产生一个优化的计划,这种新方法是极其有用的。

自适应查询优化包括两个方面:自适应计划,它着重于改善一个查询的初次执行;自适应统计信息,它为后续的执行提供了额外的信息。

(图1. 自适应查询优化功能的组件)2、自适应计划自适应计划使得优化器能够延迟产生一个语句的最终计划,直到执行的时候才决定。

优化器在它所选择的计划(缺省计划)中植入统计收集器,从而在运行的时候,它能够判断自己的基数估算与计划的操作所实际看到的行数是否有很大的偏差。

如果有显著的区别,那么这个计划或者计划的一部分在SQL语句的首次执行就能够被自动调整来避免不理想的性能。

3、自适应的连接方式通过为计划中的某些分支预先确定多个子计划,优化器能够实时调整连接方式。

例如,在图2中优化器的初始计划(缺省计划)为order_items 和 product_info 之间的连接选定的是嵌套循环连接,通过对product_info表的索引读取。

另一个可选的子计划也同时被确定,它允许优化器将连接方式切换到哈希连接。

在候选计划中product_info是通过全表扫描来读取的。

在执行的时候,统计收集器收集了关于这次执行的信息,并且将一部分进入到子计划的数据行缓存起来。

在这个例子中,统计收集器监控并缓存了对order_items的全表扫描。

基于它在统计收集器中看到的信息,优化器会最终确定采用哪个子计划。

在这个例子中,哈希连接被选为最终计划,因为来自order_items表的行数大于优化器最初的估计。

在优化器选择了最终计划之后,统计收集器停止收集统计信息以及对数据行的缓存,而仅仅是传递数据。

在子游标随后的执行中,优化器禁止了数据缓存,并且选择了同一个最终计划。

目前的优化器能够从嵌套连接切换到哈希连接,反之亦然。

可是,如果初始选中的连接方法是排序合并连接,则自适应不会发生。

(图2. 自适应执行计划确定Order_items 和 Prod_info 表之间的连接)在缺省情况下,explain plan命令只会显示优化器选定的初始(缺省)计划。

而DBMS_XPLAN.DISPLAY_CURSOR只显示查询所用的最终计划。

(图3. Explain plan 和 DBMS_XPLAN.DISPLAY_CURSOR 为图2的查询例子所输出的计划)为了看到自适应计划中所有的操作,包括统计收集器的位置,你必须在DBMS_XPLAN函数中指定额外的格式参数’+adaptive’。

在这个模式下,id栏会出现一个额外的(-)记号,指明在计划中未被采用(非激活)的操作。

在ORACLE企业管理器(OEM)中的SQL监控工具总是显示完整的自适应计划,但是并没有指明在计划中的哪些操作是非激活的。

(图4. 在DBMS_XPLAN.DISPLAY_CURSOR中使用’+adaptive’格式参数得到的完整自适应计划)V$SQL中增加了一个新的列(IS_RESOLVED_ADAPTIVE_PLAN)来指明一个SQL语句是否有自适应计划,以及该计划是否已经完全被确定。

如果IS_RESOLVED_ADAPTIVE_PLAN被设置为’Y’, 这意味着计划不仅是自适应的,而且最终计划已被选定。

可是,如果IS_RESOLVED_ADAPTIVE_PLAN 被设置为’N’, 这指明了选定的计划是自适应的,但是最终计划仍未被确认。

’N’值仅仅在一个查询的初始执行阶段中可见,在此之后,自适应计划的这个值总是为’Y’。

对于非自适应计划这个列被设置为NULL。

你也可以通过将初始化参数OPTIMIZER_ADAPTIVE_REPORTING_ONLY设置为TRUE(缺省值是FALSE),从而把自适应连接方式置于报告模式。

在这个模式下,开启自适应连接方式所需的信息会被收集,但是改变计划的任何动作都不会发生。

这意味着缺省计划总是会被采用,但是关于计划在“非报告”模式下会如何调整的信息将被收集。

这个信息可以在自适应计划的报告中被查看,当你用额外的格式参数’+report’显示计划的时候就可以看到。

(图5. 在DBMS_XPLAN.DISPLAY_CURSOR中使用’+report’格式参数所显示的完整自适应报告)4、自适应并行分配方法当一个SQL语句以并行模式运行时,某些特定操作,例如排序,聚合和连接,它们要求在执行语句的并行服务进程之间重新分配数据。

优化器所用的分配方法取决于操作类型,涉及到的并行服务进程数,以及预期的行数。

如果优化器对行数估算不准确,那么选中的分配方法就可能不理想,结果某些并行服务进程就可能得不到充分利用。

随着新的自适应分配方法”混合型哈希”(HYBRID HASH)的引入,优化器可以将分配方法的确定延迟到执行的时候才确定,此时它对于涉及到的数据行数就有了更多的信息。

一个统计收集器被插入到操作的前面,如果缓存的数据的实际行数比阈值小,则分配方法将从哈希(HASH)切换到广播(BROADCAST)。

然而,如果缓冲的行数达到了阈值,则分配方法将会是哈希(HASH)。

阈值的定义为并行度的两倍。

图6显示了SQL监控工具中的一个执行计划的例子,它是一个以并行模式执行的EMP和DEPT表之间的连接。

一组并行服务进程(生产者,即粉红色图标)扫描两个表并且将数据送给另一组并行服务进程(消费者,即蓝色图标),该组进程是连接的真正执行者。

优化器决定采用混合型哈希(HYBRID HASH)的分配方法。

在这个连接中访问的第一个表是DEPT表。

来自DEPT表的数据行被缓存在统计收集器中,见计划的第六行,直至阈值被超越,或者最后一行被获取。

在那时优化器将会决定采用何种分配方法。

(图6. SQL监控工具中的一个EMP和DEPT表之间的连接的执行计划,它使用了自适应分配方法)我们假定这个例子中的并行度被设置为6, 从DEPT表扫描返回的行数是4, 阈值则是12行(2X6)。

既然还未达到阈值,从DEPT表返回的4行将会被广播到负责完成连接的6个并行服务进程,结果计划中的分配步骤所处理的行数是是24行(4X6),见图7。

既然对于来自DEPT表的数据行采用了广播(BROADCAST)的分配方法,来自EMP表的数据行将会通过循环制(ROUND-ROBIN)的方法进行分配。

这意味着来自EMP表的一行数据将会轮流发送给6个并行服务进程中的一个,直至所有的数据行都分配完毕。

(图7. 混合型哈希分配法使用广播的分配方式,因为未达到阈值)可是,如果这个例子的并行度被设置为2, 而扫描DEPT表返回的行数为4, 则阈值为4行(2X2)。

既然已经达到了阈值,从DEPT表返回的4行数据将会以哈希(HASH)的方式分配到负责完成连接的2个并行服务进程, 结果计划中的分配步骤所处理的行数是是4行(见图8)。

既然来自DEPT表的数据行采用了哈希(HASH)分配法,来自EMP表的数据也会以哈希(HASH)方法进行分配。

(图8. 混合型哈希分配法使用哈希的分配方式,因为已达到阈值)5、自适应统计信息优化器所确定的执行计划的质量取决于可用的统计信息的质量。

然而,有些查询谓词变得过于复杂,以至于无法单独依赖于基表的统计信息,而现在优化器能够用自适应统计信息来进行增补。

在一个SQL语句的编译过程中,优化器会判断已有的统计信息是否足以产生一个好的执行计划,或者它该考虑使用动态取样。

动态取样是为了补偿缺失或者不充足的统计信息,如果不这么做,这样的信息可能导致非常糟糕的计划。

在查询中的一个或者多个表的统计信息都缺失的情况下,优化器在优化语句之前就会在这些表上使用动态取样来收集基本的统计信息。

这种情况下收集的统计信息在质量(因为是取样)和完整性上都不如使用DBMS_STATS包收集到的信息。

在Oracle 12c数据库中, 动态取样被强化为动态统计信息。

动态统计信息允许优化器强化现有的统计信息以获取更加精确的基数估算,不仅仅是为单表的访问,而且也包含连接和分组(GROUP BY)谓词。

初始化参数OPTIMIZER_DYNAMIC_SAMPLING引入了新的取样级别11。

11级使得优化器能够自动为任何SQL语句使用动态统计信息,即使所有基本的表统计信息都已经存在。

优化器做出使用动态统计的决定,是基于所用谓词的复杂性,和已经存在的基础统计信息,以及预期的SQL语句总执行时间。

例如,之前的优化器在某些情况下会使用猜测的方法,比如带有LIKE谓词和模糊匹配的查询,而现在则会启用动态统计信息。

(图9. 当 OPTIMIZER_DYNAMIC_SAMPLING 被设为级别 11,动态取样会被使用,而不是猜测)在这些新的条件下,当级别设置为11时,动态取样启用的频率很可能超过以往。

这会增加语句的解析时间。

为了将对性能的影响减到最低,动态取样查询的结果将会作为动态统计信息保留在缓存中,允许其他SQL语句来共享这些统计信息。

SQL计划指令(下面将会更详细地讨论)也会利用这种级别的动态取样。

7、自动重优化和自适应计划不同的是,在初次执行之后,自动重优化在随后的执行中修改计划。

在一个SQL语句的初次执行结束之时,优化器利用初次执行期间收集到的信息来决定自动重优化是否值得。

如果执行的信息和优化器原有的估计值有显著区别,则优化器会在下次执行寻求替换的计划。

优化器会利用前一次执行收集到的信息来帮助确定这个替换计划。

优化器可能将一个查询重新优化好几次,每次都学习并且进一步改善计划。

Oracle 12c数据库支持多种不同形式的重优化。

统计信息反馈(以前称为基数反馈,cardinality feedback)是重优化的一种形式,它自动为那些反复执行的具有基数估算误差的查询改善计划。

在一个SQL语句的首次执行期间,优化器生成了一个执行计划,并且决定是否应该为游标启动统计信息反馈监视器。

相关文档
最新文档