SQL调优指南笔记1:Introduction to SQL Tuning

Posted dingdingfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL调优指南笔记1:Introduction to SQL Tuning相关的知识,希望对你有一定的参考价值。

本文为SQL Tuning Guide第1章笔记。

SQL 调优是尝试诊断和修复不符合性能标准的 SQL 语句。

1.1 Changes in Oracle Database Release 21c for SQL Tuning Guide

1.2 About SQL Tuning

SQL 调优是提高 SQL 语句性能以满足特定、可衡量和可实现的目标的迭代过程

SQL 调优意味着修复已部署应用程序中的问题。 相比之下,应用程序设计在部署应用程序之前设定安全和性能目标。

1.3 Purpose of SQL Tuning

当 SQL 语句未能按照预定的和可衡量的标准执行时,它即成为一个问题。

确定问题后,典型的调优具有以下目标之一:

  • 减少用户响应时间,这意味着减少用户发出SQL语句和收到响应之间的时间
  • 提高吞吐量,这意味着使用最少的资源来处理语句访问的所有行

1.4 Prerequisites for SQL Tuning

  1. 数据库架构:数据库架构不仅仅是管理员的领域。 作为开发人员,您希望在最短的时间内针对 Oracle 数据库开发应用程序,这需要利用数据库架构和特性。 例如,不了解 Oracle 数据库并发控制和多版本读取一致性可能会使应用程序破坏数据的完整性、运行缓慢并降低可扩展性。详见Oracle Database Concepts
  2. SQL和PL/SQL
  3. SQL调优工具:数据库生成性能统计信息,并提供解释这些统计信息的 SQL 调优工具。详见Oracle Database 2 Day + Performance Tuning Guide

1.5 Tasks and Tools for SQL Tuning

1.5.1 SQL Tuning Tasks

SQL调优分为主动和被动两种方式。主动 SQL 调优指定期使用 SQL Tuning Advisor 来确定是否可以使 SQL 语句执行得更好。
无论哪种方式,典型的调优过程包含以下步骤:

  1. 识别重载 SQL 语句
    查看过去的执行历史以查找占比大部分应用程序工作负载和系统资源的语句。
  2. 收集性能相关数据
    优化器统计信息对于 SQL 调优至关重要。 如果这些统计信息不存在或不再准确,则优化器无法生成最佳计划。 其他与 SQL 性能相关的数据包括语句访问的表和视图的结构,以及索引定义。
  3. 确定问题的原因
    通常造成性能问题的原因包括:
    1) 设计效率低下的 SQL 语句
    2) 次优执行计划:查询优化器(也称为优化器)是确定哪个执行计划最有效的内部软件。 有时优化器会选择具有次优访问路径(access path,即从数据库中检索数据的方式)的计划。 例如,具有低选择性(selectivity,高度选择性的查询返回较低比例的行,值接近 0;而非选择性查询返回高比例的行,值接近 1)的查询谓词的计划可能会在大表上使用全表扫描而不是索引。
    3) 缺少 SQL 访问结构:缺少 SQL 访问结构(例如索引和物化视图)是 SQL 性能欠佳的典型原因。 最佳访问结构可以将 SQL 性能提高几个数量级。
    4) 陈旧的优化器统计信息:当统计信息维护操作(自动或手动)跟不上 DML 导致的表数据更改时,DBMS_STATS 收集的统计信息可能会过时。 由于表上的陈旧统计信息不能准确反映表数据,优化器可以根据错误信息做出决策并生成次优执行计划。
    5) 硬件问题:如内存,CPU和存储
  4. 定义问题的范围:解决方案的范围必须与问题的范围相匹配。否则可能会产生副作用,伤及无辜。
  5. 为执行不理想的 SQL 语句实施纠正措施:如重写SQL,重构schema对象(创建索引,调整索引列顺序,建立分区,视图)或改变数据库设计。
  6. 防止 SQL 性能退化:为确保最佳 SQL 性能,请验证执行计划是否继续提供最佳性能,并始终选择更好的计划。 您可以使用优化器统计信息、SQL 配置文件和 SQL 计划基线来实现这些目标。

1.5.2 SQL Tuning Tools

SQL 调优工具分为自动和手动两种。

如果数据库本身可以提供诊断、建议或纠正措施,那么工具就是自动化的。 手动工具要求您执行所有这些操作。

所有调优工具都依赖于数据库实例收集的动态性能视图、统计信息和指标的基本工具。 数据库本身包含调整 SQL 语句所需的数据和元数据。

自动调优工具主要包括:

  1. 自动数据库诊断监视器 (ADDM)
    ADDM 是内置于 Oracle 数据库中的自我诊断软件。可以自动定位性能问题的根本原因,提供更正建议,并量化预期收益。 ADDM 还确定不需要采取行动的区域。ADDM使用AWR中的信息。
  2. SQL Tuning Advisor
    SQL Tuning Advisor 是内部诊断软件,可识别有问题的 SQL 语句并建议如何提高语句性能。
  3. SQL Access Advisor
    SQL Access Advisor 是内部诊断软件,它建议创建、删除或保留哪些物化视图、索引和物化视图日志。这里的Access指的就是access path。
  4. Automatic Indexing
    Oracle 数据库可以持续监控应用程序负载,自动创建和管理索引。手动创建索引需要深入了解数据模型、应用程序和数据分布。 DBA 通常会选择创建哪些索引,然后从不修改他们的选择。 结果,失去了改进的机会,不必要的索引可能成为性能负担。(19c开始有此特性,只支持Exadata,详见这里
  5. SQL Plan Management
    SQL 计划管理是一种预防机制,它使优化器能够自动管理执行计划,确保数据库仅使用已知或经过验证的计划。相关概念包括SQL plan baseline。
  6. SQL Performance Analyzer(SPA)
    SQL 性能分析器通过识别每个 SQL 语句的性能差异来确定更改对 SQL 工作负载的影响。

手动调优工具主要包括:

  1. 执行计划
    执行计划是手动 SQL 调优中的主要诊断工具。 例如,您可以查看计划以确定优化器是否选择了您期望的计划,或者确定在表上创建索引的效果。最常用的查看执行计划的方法包括:DBMS_XPLAN,EXPLAIN PLAN,V$SQL_PLAN等视图,AUTOTRACE

  2. 实时 SQL 监控和实时数据库操作

  3. 应用程序跟踪
    SQL 跟踪文件(Trace file)提供有关单个 SQL 语句的性能信息:解析计数、物理和逻辑读取等信息。相关工具为TKPROF和trcsess

  4. 优化器提示
    提示(hint)是通过 SQL 语句中的注释传递给优化器的指令。提示使您能够做出通常由优化器自动做出的决定。 在测试或开发环境中,提示对于测试特定访问路径的性能很有用。

1.5.3 User Interfaces to SQL Tuning Tools

图形化工具包括EM Cloud Control,命令行工具包括SQL Plus,SQLcl。SQL工具包括DBMS_SQLTUNE程序包等。
推荐使用图形化工具。

以上是关于SQL调优指南笔记1:Introduction to SQL Tuning的主要内容,如果未能解决你的问题,请参考以下文章

SQL调优指南笔记3:SQL Processing

SQL调优指南笔记4:Query Optimizer Concepts

SQL调优指南笔记9:Joins

SQL调优指南笔记9:Joins

SQL调优指南笔记16:Managing Historical Optimizer Statistics

SQL调优指南笔记16:Managing Historical Optimizer Statistics