暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 19C 关于优化器初始化参数

原创 Asher.HU 2021-02-04
3335


本章介绍了哪些初始化参数会影响优化以及如何进行设置。

本节包含以下主题:

 

19.2.1关于优化器初始化参数

Oracle数据库提供了初始化参数来影响优化器行为的各个方面,包括游标共享,自适应优化和优化器模式。

下表列出了一些最重要的优化器参数。注意,该表不包括近似查询初始化参数,这些参数在 近似查询初始化参数 ”中进行了描述

表19-2控制优化程序行为的初始化参数

初始化参数描述
CURSOR_INVALIDATION提供DDL语句的默认游标无效级别。

IMMEDIATE为DDL设置与Oracle Database 12c第2版(12.2)之前的版本相同的游标失效行为这是默认值。

DEFERRED允许应用程序利用减少的DDL游标无效性而无需进行任何应用程序更改。延迟无效减少了游标无效的次数,并随着时间的推移分散了重新编译的工作量。因此,游标可能会以次优的计划运行,直到重新编译为止,并且可能会产生较小的执行时间开销。

您可以在SYSTEMSESSION级别设置此参数请参阅 关于共享游标的生命周期 

CURSOR_SHARING

将SQL语句中的文字值转换为绑定变量。转换值可以改善游标共享,并且可以影响SQL语句的执行计划。优化器基于绑定变量的存在而不是实际文字值来生成执行计划。

设置为FORCE在共享现有游标或游标计划不是最佳方案时启用新游标的创建。设置为EXACT仅允许具有相同文本的语句共享同一光标。

DB_FILE_MULTIBLOCK_READ_COUNT

指定在全表扫描或索引快速全扫描期间在单个I / O中读取的块数。优化器使用此参数的值来计算全表扫描和索引快速全扫描的成本。较大的值将导致全表扫描的成本降低,这可能会导致优化器选择全表扫描而不是索引扫描。

此参数的默认值对应于数据库可以有效执行的最大I / O大小。此值取决于平台,对于大多数平台为1 MB。由于参数以块表示,因此将其设置为等于可以有效执行的最大I / O大小除以标准块大小的值。如果会话数非常大,则多块读取计数值会减少,以避免缓冲区高速缓存中充满太多表扫描缓冲区。

OPTIMIZER_ADAPTIVE_PLANS

控制自适应计划。适应性计划有其他选择。优化器根据查询执行时收集的统计信息在运行时决定计划。

默认情况下,此参数为true,表示已启用自适应计划。设置为此参数将false禁用以下功能:

  • 嵌套循环和哈希联接选择
  • 星型转换位图修剪
  • 自适应并行分配方法

请参阅 关于自适应查询计划 

OPTIMIZER_ADAPTIVE_REPORTING_ONLY

控制自动重新优化和自适应计划的报告模式(请参阅 自适应查询计划 )。默认情况下,报告模式为关闭(false),这表示已启用自适应优化。

如果设置为true,则自适应优化将在仅报告模式下运行。在这种情况下,数据库会收集自适应优化所需的信息,但不会采取任何措施来更改计划。例如,自适应计划始终选择默认计划,但是如果参数设置为,则数据库收集有关数据库将使用哪个计划的信息false您可以使用查看报告DBMS_XPLAN.DISPLAY_CURSOR

OPTIMIZER_ADAPTIVE_STATISTICS

控制自适应统计。当查询谓词过于复杂而无法仅依赖基表统计信息时,优化器可以使用自适应统计信息。

默认情况下OPTIMIZER_ADAPTIVE_STATISTICSfalse,表示禁用以下功能:

  • SQL计划指令
  • 统计反馈
  • 自适应动态采样

请参阅 自适应统计 

OPTIMIZER_MODE

在数据库实例启动时设置优化器模式。可能的值是ALL_ROWSFIRST_ROWS_nFIRST_ROWS

OPTIMIZER_INDEX_CACHING

通过嵌套循环控制索引探针的成本分析。值的范围0100表示在缓冲区缓存索引块,的百分比,其修饰优化有关索引缓存嵌套循环和IN-列表迭代假设。值的100推断是可能在缓冲区高速缓存中找到100%的索引块,因此优化程序会相应地调整索引探针或嵌套循环的成本。设置此参数时请小心,因为执行计划可能会更改,以利于索引缓存。

OPTIMIZER_INDEX_COST_ADJ

调整索引探针的成本。该值的范围是110000默认值为100,这表示优化器基于正常成本模型将索引评估为访问路径。10表示索引访问路径的成本是索引访问路径的正常成本的十分之一。

OPTIMIZER_INMEMORY_AWARE

此参数启用(TRUE)或禁用(FALSE)所有Oracle数据库内存(数据库内存)优化器功能,包括IM列存储的成本模型,表扩展,Bloom过滤器等。将参数设置为FALSE会导致优化器INMEMORY在优化SQL语句期间忽略属性。

OPTIMIZER_USE_INVISIBLE_INDEXES

启用或禁用不可见索引的使用。

QUERY_REWRITE_ENABLED

启用或禁用优化器的查询重写功能。

TRUE,它是默认设置,使优化程序能够利用实例化视图来提高性能。FALSE禁用优化器的查询重写功能,并指示优化器不要使用实例化视图重写查询,即使未优化查询的估计查询成本较低。FORCE启用优化器的查询重写功能,并指示优化器使用实例化视图重写查询,即使未优化查询的估计查询成本较低。

QUERY_REWRITE_INTEGRITY

确定强制执行查询重写的程度。

默认情况下,完整性级别设置为ENFORCED在此模式下,必须验证所有约束。数据库不使用依赖于未强制约束的查询重写转换。因此,如果使用ENABLE NOVALIDATE RELY,则某些类型的查询重写可能不起作用。

要在约束处于NOVALIDATE模式下时启用查询重写,完整性级别必须为TRUSTEDSTALE_TOLERATEDTRUSTED模式下,优化器相信在尺寸和RELY约束中声明的关系是正确的。STALE_TOLERATED模式下,优化器使用有效但包含陈旧数据的物化视图以及包含新鲜数据的物化视图。此模式提供最大的重写功能,但存在产生不准确结果的风险。

RESULT_CACHE_MODE

控制数据库是对所有查询使用SQL查询结果缓存,还是仅对使用结果缓存提示注释的查询使用SQL查询结果缓存。设置为MANUAL(默认)时,必须使用RESULT_CACHE提示来指定将特定结果存储在缓存中。设置为时FORCE,数据库将所有结果存储在缓存中。

设置此参数时,请考虑结果缓存如何处理PL / SQL函数。数据库使用跟踪PL / SQL函数的数据依赖关系的相同机制使结果缓存中的查询结果无效,否则允许缓存包含PL / SQL函数的查询。由于PL / SQL函数结果缓存失效不会追踪各种依赖关系(如序列SYSDATESYS_CONTEXT和包变量),乱用在查询调用等功能可以导致改变结果的查询结果缓存,那就是,错误的结果。因此,选择启用结果缓存时,尤其是当设置考虑正确性和性能RESULT_CACHE_MODEFORCE

RESULT_CACHE_MAX_SIZE

更改分配给结果缓存的内存。如果将此参数设置为0,那么将禁用结果缓存。此参数的值四舍五入为最大32 KB的倍数,该倍数不大于指定的值。如果舍入值为0,则该功能被禁用。

RESULT_CACHE_MAX_RESULT

指定任何单个结果可以使用的最大高速缓存内存。默认值为5%,但是您可以在1100之间指定任何百分比值

RESULT_CACHE_REMOTE_EXPIRATION

指定取决于远程数据库对象的结果保持有效的分钟数。默认值为0,这表示数据库不应使用远程对象缓存结果。将此参数设置为非零值可能会产生陈旧的答案,例如,如果远程数据库修改了结果中引用的表,则该答案会过期。

STAR_TRANSFORMATION_ENABLED

使优化器可以对星标查询(如果true进行星标转换星型转换结合了各个事实表列上的位图索引。

也可以看看:

  





「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论