关于sql引擎 和 plsql引擎

简介: oracle 使用2个引擎来执行SQL和代码块:SQL 引擎和PL/SQL 引擎, Oracle 使用这2个引擎来执行PL/SQL blocks 和 subprograms。

oracle 使用2个引擎来执行SQL和代码块:SQL 引擎和PL/SQL 引擎, Oracle 使用这2个引擎来执行PL/SQL blocks 和 subprograms。那么在执行的时候,PL/SQL 引擎把DML 语句发送给SQL 引擎,然后由SQL 引擎执行,执行完毕后,SQL 引擎把结果集在发送给PL/SQL 引擎。因此在不同引擎之间切换就需要进行context switch,过多的context switch是会影响SQL性能的。而bulk (关于bulk,后续介绍)就是从减少引擎之间context switches的方式来提高sql的效率。 把对SQL 进行打包处理。 


1、sql引擎介绍
一条sql语句在sql引擎中,大致会经过如下三个步骤:解析(parse)、执行(execute)、获取(fetch):这三个步骤分别由sql引擎的不同的组件完成。

1.1、sql编译器(sql compiler)


解析器(parser):

查询优化器(Query Optimizer):为语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,调用计划生成器(Plan Generator)生成计划,比较计划的代价,最终选择一个代价最小的执行计划(注意代价估算器只能估算出代价,并不能选择出最优的,来让计划生成器生成那个最优的,而是让计划生成器生成所有的执行计划,再进行比较)。

通过上图也可以看到,查询优化器包含了:查询转换器(Query Transform)、代价估算器(Estimator)、计划生成器。

那么,我们继续看下查询优化器包含的这三个组件的用途:

查询转换器:决定是否重写用户的查询(包括视图合并,子查询反嵌套),以生成更好的查询计划。

代价估算器:代价估算器使用统计数据来估算操作的选择率(selectivity)、返回数据集的势(Cardinality)和代价。并最终估算出整个执行计划的代价。

计划生成器:计划生成器会考虑可能的访问路径(Access Path)、关联的方法和关联的顺序,生成不同的执行计划,让查询优化器从这些计划中选择代价最小的一个执行计划。


行源生成器(Row Source Generator):行源生成器从查询优化器接收到优化的执行计划,然后为该计划生成行源(Row Source)。行源是一个可被迭代控制的结构体,它能以迭代方式处理一组数据行、并生成一组数据行。


1.2、sql执行引擎(sql Execution Engine)

sql执行引擎依照语句的执行计划进行操作,产生查询结果。在每一个操作中,sql执行行引擎会以迭代的方式执行行源、生成数据行。


1.3、执行计划的生成
当前实例内存中的执行计划,可以通过视图:v$sql_plan读取。
启用了awr时,oracle会将内存的执行计划存到历史数据中,我们可以通过查询sql语句,或者oracle提供的系统包dbms_xplan从历史数据中读取。


除了通过执行sql让oracle在内存中生成执行计划外,我们还可以通过命令Explain Plan让优化器仅对sql语句进行解释,生成执行计划,由于语句并不会真正执行,因此它可以含有没有赋值的绑定变量。执行explain plan命令后,oracle会将解释生成的查询计划插入表SYS.PLAN_TABLE$中。然后我们就可以通过查询语句或者包:dbms_xplan从该表中读取查询计划咯。
注意:通过explain plan解释出来的查询计划不会被缓存到内存中,供语句执行时重用。


2、pl/sql引擎介绍












相关文章
|
7月前
|
SQL 存储 分布式计算
统一sql引擎Quicksql
统一sql引擎Quicksql
|
7月前
|
SQL 消息中间件 Apache
Apache Calcite—sql执行和解析引擎
Apache Calcite—sql执行和解析引擎
129 0
|
SQL 缓存 数据库
OBCP第三章 SQL引擎高级技术-执行计划
OBCP第三章 SQL引擎高级技术-执行计划
318 0
|
SQL 存储 数据库
OBCP第三章 SQL引擎高级技术-DML语句处理
OBCP第三章 SQL引擎高级技术-DML语句处理
78 0
|
SQL 自然语言处理 算法
OBCP第三章 SQL引擎高级技术-SQL请求执行流程
OBCP第三章 SQL引擎高级技术-SQL请求执行流程
88 0
|
SQL Oracle 关系型数据库
第五章:OB Server的SQL引擎
第五章:OB Server的SQL引擎
165 0
|
SQL 分布式计算 数据库连接
大数据Spark分布式SQL引擎
大数据Spark分布式SQL引擎
274 0
|
6天前
|
SQL 存储 缓存
日志服务 SQL 引擎全新升级
SQL 作为 SLS 基础功能,每天承载了用户大量日志数据的分析请求,既有小数据量的快速查询(如告警、即席查询等);也有上万亿数据规模的报表级分析。SLS 作为 Serverless 服务,除了要满足不同用户的各类需求,还要兼顾性能、隔离性、稳定性等要求。过去一年多的时间,SLS SQL 团队做了大量的工作,对 SQL 引擎进行了全新升级,SQL 的执行性能、隔离性等方面都有了大幅的提升。
|
5月前
|
SQL 数据处理 Apache
Apache Flink SQL:实时计算的核心引擎
Apache Flink SQL 的一些核心功能,并探讨了其在实时计算领域的应用。随着 Flink 社区的不断发展和完善,Flink SQL 将变得越来越强大,为实时数据分析带来更多的可能性。
|
7月前
|
SQL 运维 监控
面经:Presto/Trino高性能SQL查询引擎解析
【4月更文挑战第10天】本文深入探讨了大数据查询引擎Trino(现称Trino)的核心特性与应用场景,适合面试准备。重点包括:Trino的分布式架构(Coordinator与Worker节点)、连接器与数据源交互、查询优化(CBO、动态过滤)及性能调优、容错与运维实践。通过实例代码展示如何解释查询计划、创建自定义连接器以及查看查询的I/O预期。理解这些知识点将有助于在面试中脱颖而出,并在实际工作中高效处理数据分析任务。
547 12