ORACLE_OCP之性能管理-SQL调优

ORACLE_OCP之性能管理-SQL调优

  • 文章目标:
    • 管理优化器统计信息
    • 使用SQL Tuning Advisor可以: (重点记忆)
    • 识别使用最多资源的SQL语句
    • 调整使用最多资源的SQL语句
    • 使用SQL Access Advisor调整工作负载(重点记忆)

一、SQL优化

  • 识别和调整不良的SQL语句。
  • 调整各个语句。
  • 调整整个应用程序。

二、Oracle Optimizer(ORACLE优化器):概述

  • Oracle优化器确定最有效的执行计划,并且是处理任何SQL语句中最重要的步骤.
  • 优化器:
    • 评估SQL表达式和条件
    • 使用对象和系统统计信息
    • 决定如何访问数据
    • 决定如何联接表
    • 确定最有效的路径(最佳的执行计划)

三、优化器统计

  • 一个时间点的快照
  • 持续跨实例收集
  • 自动收集

在这里插入图片描述

四、优化器统计信息收集

  • SQL性能调优:取决于准确的统计信息的收集

  • 优化器统计:

    • 对象统计
    • 操作系统统计
  • 收集统计信息的方法:

    • 自动:自动维护任务
    • 手动:DBMS_STATS软件包
    • 通过设置数据库初始化参数
    • 通过从另一个数据库导入统计信息
  • 系统统计信息向查询优化器描述了系统的硬件特性,例如I / O以及CPU性能和利用率。 选择执行计划时,优化器会估算每个查询所需的I / O和CPU资源。 系统统计信息使查询优化器可以更准确地估计I / O和CPU成本,从而选择更好的执行计划。

  • 使用DBMS_STATS.GATHER_SYSTEM_STATS过程收集系统统计信息。

  • Oracle数据库服务器收集系统统计信息时,会在指定的时间段内分析系统活动。 系统统计信息不会自动收集。 Oracle Corporation(甲骨文公司)建议您使用DBMS_STATS包来收集系统统计信息。

  • 可以直接使用DBMS_STATS软件包收集优化器统计信息:

    SQL> EXEC dbms_stats.gather_table_stats(‘HR’,‘EMPLOYEES’);
    SQL> SELECT num_rows FROM dba_tables WHERE owner=‘HR’ AND table_name = ‘EMPLOYEES’;

  • 最佳实践提示:创建数据库后执行以下命令:

    SQL> EXEC dbms_stats.gather_system_stats(‘NOWORKLOAD’);

  • NOWORKLOAD选项花费几分钟(取决于数据库的大小),并捕获I / O特性(例如平均读取寻道时间和I / O传输速率)的估计值。

五、设置优化器统计信息首选项

  • 优化器统计信息首选项包含以下默认参数:

    • Automatic statistics collection(自动统计信息收集)
    • DBMS_STATS.GATHER_*_STATS procedures
  • 设置性能级别:

    Table, schema, database, or global

  • 首选项: CASCADE, DEGREE, ESTIMATE_PERCENT, NO_INVALIDATE, METHOD_OPT, GRANULARITY, INCREMENTAL, PUBLISH, STALE_PERCENT

  • 使用DBMS_STATS.SET | GET | DELETE | EXPORT | IMPORT_*_PREFS 管理相关性能

EXEC DBMS_STATS.SET_TABLE_PREFS(‘SH’,‘SALES’,‘STALE_PERCENT’,‘13’);

  • 首选项包括:
    • CASCADE –确定是否将索引统计信息收集为收集表统计信息的一部分
    • DEGREE –设置用于收集统计信息的并行度
    • PUBLISH –用于决定是将统计信息发布到字典还是将其存储在私有区域中。这使DBA可以先验证统计信息,然后再使用PUBLISH_PENDING_STATS过程将统计信息发布到数据字典中。
    • STALE_PERCENT –用于确定阈值级别,在该阈值级别,对象被认为具有过时的统计信息。该值是自上次统计信息收集以来已修改的行的百分比。该示例仅将SH.SALES的10%默认值更改为13%。
    • INCREMENTAL –用于以增量方式收集分区表的全局统计信息
    • METHOD_OPT –确定用于收集列统计信息的列和直方图参数
    • GRANULARITY –确定要收集的统计信息的粒度(仅在表已分区时才相关)
    • NO_INVALIDATE –用于确定是否使游标无效
    • ESTIMATE_PERCENT –用于确定要获得良好统计信息的样本行数。它是表中行数的百分比

六、并发统计收集

  • 自动统计信息收集作业使用并发性。 适用于自动采集
  • 防止并发统计信息收集,以免由于谨慎的资源使用上限而使系统不堪重负。-> 手动采集
  • 允许同时收集索引统计信息。
  • 允许同时收集多个分区表的统计信息。

七、查看统计信息

在这里插入图片描述

八、SQL计划指令

  • SQL计划指令是优化程序可用来生成更好计划的附加信息和指令:
    收集缺失的统计信息
    创建列组统计信息
    执行动态采样
  • 指令可用于多个语句:
    • 指令是根据查询表达式收集的
  • 它们被持久化到SYSAUX表空间中.
  • 指令自动维护:
    • 在编译或执行期间根据需要创建:
      • 缺少统计信息,基数估计错误
    • 如果一年后不使用,则清除

九、自适应执行计划

  • 语句执行计划在执行期间会更改,因为运行时某些条件会因为优化器估计不足而造成不正确选择。
  • 所有自适应执行计划都依赖于语句执行期间收集的统计信息.
  • 两种自适应计划技术是:
    • 动态计划生成
    • 优化器再评古
  • 当OPTIMIZER_FEATURES_ENABLE设置为12.1.0.1或更高,并且OPTIMIZER_ADAPTIVE_REPORTING_ONLY设置为默认值FALSE时,数据库将使用自适应执行计划。

十、SQL Tuning Advisor(SQL优化顾问): 概述

在这里插入图片描述

十一、使用SQL优化顾问

  • 使用SQL Tuning Advisor分析SQL语句并获得性能优化建议.
  • SQL Tuning Advisor的源进行分析:
    • Top活动记录: 分析当前活动的TOP SQL语句

      注:这里的TOP指的是高开销语句

    • SQL调优集合:分析您提供的一组SQL语句

    • 历史SQL (AWR):从AWR报告中分析SQL语句

十二、SQL Access Advisor(SQL访问顾问): Overview

在这里插入图片描述

  • SQL Access Advisor可以为给定的工作负载推荐适当的物化视图集,物化视图日志,分区和索引。 在优化SQL时,理解和使用这些结构至关重要,因为它们可以显着提高数据检索的性能。
  • SQL Access Advisor建议使用位图索引,基于函数的索引和B树索引。 与其他索引技术相比,位图索引可缩短许多类型的即时查询的响应时间,并减少存储需求。 B树索引最常用于数据仓库中,以索引唯一或接近唯一的键。
  • SQL Access Advisor的另一个组件还建议如何优化物化视图,以便它们可以快速刷新并利用常规查询重写的优势。

注意:有关实例化视图和查询重写的更多信息,请参见《 Oracle数据库性能调优指南》。

十三、SQL Performance Analyzer(SQL性能分析器): 概述

  • 目标用户:DBA,QA(运维),应用程序开发人员
  • 帮助预测系统更改对SQL工作负载响应时间的影响
  • 构建不同版本的SQL工作负载性能(即,SQL执行计划和执行统计信息)
  • 串行执行SQL(不支持并发)
  • 分析性能差异
  • 提供有关单个SQL的细粒度性能分析
  • 与SQL Tuning Advisor集成以调整回归(统计学概念)

十四、SQL性能分析器: 使用条件

  • SQL Performance Analyzer在以下用例中很有用:
    • 数据库升级
    • 实施优化建议后
    • 模式(SCHEMA)变更
    • 统计数据收集(也包括一些失效的统计数据)
    • 数据库参数更改
    • 操作系统和硬件更改
  • 可通过企业管理器和DBMS_SQLPA程序包进行访问.

十五、使用SQL性能分析器

  • 在生产中捕获SQL工作负载。
  • 将SQL工作负载传输到测试系统。
  • 建立“变更前”性能数据。
  • 做出改变。(性能分析器内部改变测试)
  • 建立“变更后”性能数据。
  • 比较步骤3和5的结果。
  • 调整SQL。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值