`
jackiezy
  • 浏览: 43476 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

TOP 第五章 之 CBO配置策略

阅读更多

继续贴出 Troubleshooting Oracle Performance 一书第五章《配置查询优化器》的翻译稿的部分节录。本章初稿译者胡怡文.

配置还是不配置

在此套用一句肯尼亚谚语 ,"配置查询优化器的代价是昂贵的,但值得为此付出。"(注1)实际上,我曾见过许多低估良好配置重要性的站点。有时,我甚至和一些人进行激烈的讨论,他们认为"没有必要费心为每一个数据库单独配置查询优化器,我们已经有一套初始化参数,而且在所有数据库上屡试不爽。"通常,我首先会这样回答这个问题:"如果一个配置集能适用于所有数据库,为什么Oracle要介绍二十多个专用于查询优化器的初始化参数?甲骨文公司知道自己在干什么。如果存在这样一个万能的神奇配置,他们会以默认的方式提供,还可以省去一大堆初始化参数的正式说明文档。"接下来我会详细解释这个神奇配置不存在的原因:

  • 每个应用都有自身的需求和负载概要,并且
  • 每一个由不同的软硬件构成的系统,都有其自身的特点。

如果遇到麻烦的是顾客,通常我也会提醒他们"您找我是因为你遇到性能上的问题,对吧?由于某种原因,应用没有达到最佳表现,但数据库也得为目前的情况负一部分责任...所以,让我们着手处理这个问题吧。"

据说,至少从Oracle9iR2开始,查询优化器就能良好运转了,这意味着它能够为大多数注2SQL语句生成高效的执行计划。然而更准确的说,仅在查询优化器配置正确且数据库的设计能够发挥其所有特性时才是如此。这件事我已再三强调,同时也要记住查询优化器的配置不仅包括初始化参数的设置,也包括系统统计和对象统计。

配置路线图

既然没有这样的神奇配置,就需要一个可靠的步骤来帮助我们。图5-1汇总了我采用的主要步骤。

CBO_Configure.png 图5-1. 配置路线图的主要步骤 下面是对图中标有数字的步骤的描述
  • 1. 总是需要调整的两个初始化参数:optimizer_mode和db_file_multiblock_read_count。 就如你将在本章后面看到的那样,后者对查询优化器本身来说已经不再那么重要。然而,个别操作的性能还将严重依赖它。
  • 2. 这步要调整的几个初始化参数通常默认已经被设置为比较合适的值,所以这步显得不是十分重要。然而无论如何,这一步的目的是要启用或禁用查询优化器的某些特性。
  • 3. 既然系统统计和对象统计为查询优化器提供了至关重要的信息,那么它们必须被收集。
  • 4. 根据初始化参数workarea_size_policy的不同,在内存中存储数据时选择是手动还是自动调整内存的使用量。做出选择后,其它初始化参数值在第五步或第六步设置。
  • 5. 如果上面选择的是自动设置工作使用的内存量,那么需要设置初始化参数pga_aggregate_target。
  • 6. 如果选择手工设置的话,实际使用的内存量分别取决于对每一种不同操作所设置的阀值。基本上,对每一种不同的操作都要设置一个特殊的初始化参数。
  • 7. 当刚才的设置生效后,就开始测试应用。在测试期间,对没有表现出期望性能的那部分收集执行计划。通过分析执行计划,你应该能够推测出问题所在。本阶段需要注意,关键是要识别出一般的、非特殊的现象。比如说,需要注意查询优化器是否使用了过多或过少的索引,又或是否没有正确识别约束。
  • 8. 如果查询优化器能够为大多数SQL语句提供高效的执行计划,说明配置成功。否则,需要进行第九步。
  • 9. 假如查询优化器倾向于使用过多或过少的索引,又或是嵌套循环的话。通常需要调整初始化参数optimizer_index_caching和optimizer_index_cost_adj修正这个问题。如果查询优化器错误地估计了基数(cardinality)。有可能是某些直方图丢失或需要调整。在Oracle 11g中,扩展的统计(extended statistic)也能够提供一些帮助。

根据图5-1,从第1步到第6步设置的初始化参数不宜改变。当然,这也不是铁板钉钉的。如果在第九步调节了索引相关的初始化参数和直方图后,还没有达到预期的效果。就有必要从头再来了。还有一点要提一下,既然有些初始化参数的设置对系统统计有影响,在调整它们以后,必须重新计算一下系统统计值。


  • 注1:那句肯尼亚谚语是"和平的代价是昂贵的,但值得为此付出。" 可以在http://www.quotationspage.com/quote/38863.html. 找到这个引用。
  • 注2:和我们在其它可想像的活动中一样,在软件开发中完美也是不可信任的。即使你和Oracle都不希望这样,查询优化器也是如此。因此,应当期盼只有少数的SQL语句需要手动调整的介入(这个话题放在第七章)。
--EOF--
分享到:
评论

相关推荐

    CBO原书代码

    - CBO的成本估算模型:CBO基于统计信息和数据库配置来估算每个操作的成本,如I/O、CPU等。 - 优化器模式:固定规则(Rule-Based Optimizer, RBO)与成本基础(CBO)的区别,以及何时应该使用CBO。 - 参数调优:学习...

    oracle cbo

    cbooracle cbo

    oracle CBO HINT

    Oracle的Cost-Based Optimizer (CBO) 是一种自动选择最优执行计划的机制,它通过评估不同执行路径的成本来决定如何执行SQL查询。CBO会考虑各种因素,包括表的大小、索引的存在、数据分布等,以确定最有效率的查询...

    cbo数据库优化

    **CBO数据库优化详解** ...总之,CBO数据库优化是一个系统性的过程,涉及到统计信息的维护、执行计划的选择以及数据库的整体配置。正确理解和运用这些知识点,可以帮助我们显著提升Oracle数据库的性能。

    【Maclean Liu技术分享】拨开Oracle CBO优化器迷雾,探究Histogram直方图之秘_0321.pdf

    ### Oracle CBO优化器与直方图(Histogram)解析 #### 概述 在数据库管理领域,Oracle CBO(Cost-Based Optimizer)成本基于优化器是Oracle数据库管理系统中用于确定查询执行计划的一种重要机制。通过分析SQL语句,...

    ORACLE CBO RBO 优化

    ORACLE CBO RBO 优化

    CBO,RBO在ORACLE中的应用

    在Oracle数据库中,CBO(Cost-Based Optimizer)和RBO(Rule-Based Optimizer)是两种不同的SQL查询优化策略。CBO自Oracle 7引入,但在Oracle 8i时达到成熟,并在Oracle 9i及以后的版本中逐渐取代RBO成为主要的优化...

    how-cbo-works

    ### 如何理解CBO在Oracle数据库中的工作原理 本文旨在深入探讨成本基础优化器(Cost-Based Optimizer,简称CBO)在Oracle数据库中的工作方式及其重要性。通过一个具体的示例,我们将逐步分析CBO如何根据表统计信息...

    Oracle的RBO和CBO详细介绍和优化模式设置方法

    优化器主要有两种策略:基于规则的优化(RBO)和基于代价的优化(CBO)。理解这两种优化方式以及如何设置优化模式对于数据库管理员和开发人员来说至关重要。 **RBO(基于规则的优化)**: RBO是早期Oracle版本中...

    基于CBO的Oracle的成本分析.pdf

    相比之下,传统的基于规则的优化器(Rule-Based Optimizer,简称RBO)则是根据预设的优化规则来制定执行计划,这些规则来源于提示(hint)的集合。 【CBO的成本计算公式分析】 在不同的Oracle版本中,CBO计算成本的...

    asp.net cbo实现多行选中

    1. **自定义控件**:由于ASP.NET内置的ComboBox不支持多行选中,我们需要创建一个自定义控件或使用第三方库来扩展其功能。这可能涉及到继承现有的ComboBox类,然后添加多选特性。 2. **多选模式**:在多行选中模式...

    Oracle CBO 学习笔记之(1) : 深入理解Oracle Hash Join的代价模型及其执行流程

    Oracle Cost-Based Optimizer (CBO) 是Oracle数据库中的一种查询优化策略,它通过评估不同查询执行计划的成本来选择最优的执行路径。在这个学习笔记中,我们将深入探讨Oracle中的Hash Join操作,这是一种重要的联接...

    Oracle CBO几种基本的查询转换详解

    它通过对不同查询路径的成本估计来确定最优的查询执行策略。在本篇内容中,我们将深入探讨Oracle CBO的几种基本查询转换,这些转换有助于提高查询性能,包括视图合并、子查询解嵌套、谓语前推和物化视图查询重写。 ...

    UFIDA.U9.CBO.ItemMasterBE.zip

    标题 "UFIDA.U9.CBO.ItemMasterBE.zip" 指的是用友U9系统中的一个插件开发相关的代码示例。用友U9是一款面向大型企业的全面企业管理软件,其核心设计思想是“实时企业,全球商务”。CBO(Client Business Object)是...

    Oracle SQL Tuning with Oracle SQLTXPLAIN.pdf

    #### 第五章:查询转换的故障排除 查询转换是Oracle数据库中的一种优化技术,用于改变查询的执行方式以提高效率。然而,不当的查询转换有时会导致性能下降或其他问题。本章重点介绍了如何识别和修复因查询转换引起...

    Top-SQL Tuning SQL语句调整

    - **基于成本的优化(Cost-based Optimizer)**:相比基于规则的优化策略,CBO通常能更准确地估计成本,从而选择更高效的执行计划。可以通过调整`optimizer_mode`参数为`CHOOSE`,让优化器在不同模式间智能选择。 -...

    asp.net cbo实现多行选中.rar

    在ASP.NET开发中,"CBO"通常指的是ComboBox控件,它是一种常见的用户界面元素,允许用户从下拉列表中选择一个或多个项。在标题"asp.net cbo实现多行选中.rar"中,提到的"多行选中"功能是指在ComboBox中允许用户同时...

Global site tag (gtag.js) - Google Analytics