《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本节书摘来自华章出版社《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一 书中的第1章,第1.1节,作者:黄玮,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 生成执行计划

在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID。而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本的游标,不同的游标会有不同的执行计划。每个游标都会按顺序赋予一个序列号,即CHILD_NUMBER,一条语句生成的第一个游标的CHILD_NUMBER为0;相应的,Oracle会为每个执行计划生成一个哈希值以作区分。而多个不同版本的游标,其执行计划可能会相同,也可能不同。
因此,我们可以知道,一条合法的SQL语句在执行过后,在内存中最少会有一个执行计划与其游标相对应。当前实例内存(Library Cache)中的执行计划可以通过视图V$SQL_PLAN读取(RAC环境中,可以通过视图gv$sql_plan查看RAC当中其他实例上的执行计划)。在启用了自动负载知识库(Automatic Workload Repository,AWR,10g及以后版本),Oracle会将内存中的执行计划存储在历史数据当中,我们可以通过查询语句或者Oracle提供的包DBMS_XPLAN从历史数据中读取。此外,从10g开始,Oracle还提供一个自动优化工具DBMS_SQLTUNE对单个或一组语句进行自动优化,它可以在一段时间内捕捉内存中语句和执行计划来生成一组SQL集(或者称SQL调优集,SQL Tuning Set),我们同样可以从SQL集中读取和显示语句的执行计划。在11g当中,Oracle又引入了SQL执行计划管理(SQL Plan Management)的特性,可以将语句的一个或多个执行计划存储在一个执行计划基线(Plan Baseline)当中,我们同样可以读取基于执行计划基线生成的计划。
提示:AWR的历史数据、执行计划基线都是有保存期限的,可以通过相关参数设置。
除了通过执行SQL让Oracle处理引擎在内存中生成执行计划外,我们还可以通过命令Explain Plan让优化器仅对SQL语句进行解释,生成查询计划。由于语句并不会实际执行,因此它可以含有没有赋值的绑定变量。
执行Explain Plan命令后,Oracle会将解释生成的查询计划插入表SYS.PLAN_TABLE$(10g之前,表名为PLAN_TABLE;10g之后,通过公共同义词PLAN_TABLE指向SYS.PLAN_TABLE$)中。我们就可以通过查询语句或者Oracle提供的包DBMS_XPLAN从该表中读取查询计划。注意,通过Explain Plan解释出来的查询计划不会被缓存到内存中以便在语句执行时重用,我们在缓存当中看到的是类似“explain plan for ”的形式。
要注意的是,如果要解析语句的执行计划,用户必须拥有语句中对象及其依赖对象的权限。如果语句中存在视图,用户必须有对视图依赖表的查询权限。例如,当一个用户A基于表T创建了一个视图V,并将视图的查询权限赋予了用户B,那么用户B仅能通过视图查询表的数据,但无法直接调用Explain Plan命令解析基于该视图的查询的执行计划。

相关文章
|
7天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
16天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
60 10
|
15天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
19天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
29天前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
53 3
|
1月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
87 2

推荐镜像

更多