iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >体系_sql语句解析执行步骤
  • 127
分享到

体系_sql语句解析执行步骤

2024-04-02 19:04:59 127人浏览 八月长安
摘要

I 客户端把语句发给服务器端执行 1 当我们在客户端执行sql语句时,客户端会把这条SQL语句通过service process进程发送给服务器端,让服务器端的进程来处理这语句。在PGA 中分为

体系_sql语句解析执行步骤

I 客户端把语句发给服务器端执行

1 当我们在客户端执行sql语句时,客户端会把这条SQL语句通过service process进程发送给服务器端,让服务器端的进程来处理这语句。在PGA 中分为UGA和CGA 。

UGA 用户全局区,用户 私有信息,大小20m, 软软解析session_cached_cursors控制软软解析的个数,50-100。

CGA排序order by、位图合并等

客户端的进程跟服务器的进程是一一对应的。也就是说,在客户端连接上服务器后,在客户端与服务器端都会形成一个进程,客户端上的我们叫做客户端进程,而服务器上的我们叫做服务器进程。

II语句解析

1

当客户端把SQL语句传送到服务器后,服务器进程会对该语句进行解析。这个解析的工作是在服务器端所进行的,解析动作又可分为很多小动作。

1)查询高速缓存(library cache)

service process在接到客户端传送过来的SQL语句时,不会直接去数据库查询。service process进程把这个SQL语句的字符转化为ASCII等效数字码,接着这个ASCII码被传递给一个HASH函数,并返回一个hash值,然后服务器进程将到shared pool中的library cache(高速缓存)中去查找是否存在相同的hash值。如果存在,服务器进程将使用这条语句已高速缓存在SHARED POOL的library cache中的已分析过的版本来执行,省去后续的解析工作,这便是 软解析。若调整缓存中不存在,则需要进行后面的步骤,这便是 硬解析。硬解析通常是昂贵的操作,大约占整个SQL执行的70%左右的时间,会消耗cup资源,硬解析会生成执行树,执行计划,等等。

执行过3次软解析后,就成为 软软解析

2) 语法合理性检查( row cache

当在高速缓存中找不到对应的SQL语句时,则服务器进程就会开始检查这条语句的合法性。这里主要是对SQL语句的语法进行检查,如果服务器进程认为语句不符合语法规则的时候,就会把这个错误信息反馈给客户端。

3)语言含义检查(row cache)

若SQL 语句符合语法上的定义的话,则服务器进程接下去会对语句中涉及的表、索引、视图等对象进行解析,并对照数据字典检查这些对象的名称以及相关结构,看看这些字段、表、视图等是否在数据库中。如果表名与列名不准确的话,则数据库会就会反馈错误信息给客户端。

所以,有时候我们写select语句的时候,若语法与表名或者列名同时写错的话,则系统是先提示说语法错误,等到语法完全正确后再提示说列名或表名错误。

4)获得对象解析(control structer)

当语法、语义都正确后,系统就会对我们需要查询的对象加锁。这主要是为了保障数据的一致性,防止我们在查询的过程中,其他用户对这个对象的结构发生改变。

5)数据访问权限的核对(row cache)

当语法、语义通过检查之后,客户端还不一定能够取得数据,服务器进程还会检查连接用户是否有这个数据访问的权限。若用户不具有数据访问权限的话,则客户端就不能够取得这些数据。要注意的是数据库服务器进程先检查语法与语义,然后才会检查访问权限。

6)确定最佳执行计划

当语法与语义都没有问题权限也匹配,服务器进程还是不会直接对数据库文件进行查询。服务器进程会根据一定的规则,对这条语句进行优化

当服务器进程的优化器确定这条查询语句的最佳执行计划后, 就会将这条SQL语句与执行计划保存到数据高速缓存(library cache)。如此,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行SQL语句,提高SQL语句处理效率。

III 绑定变量赋值

如果SQL语句中使用了绑定变量,扫描绑定变量的声明,给绑定变量赋值,将变量值带入执行计划。若在解析的第一个步骤,SQL在高速缓冲中存在,则直接跳到该步骤。

IIII语句执行

对于SELECT 语句:

1)首先服务器进程要判断所需数据是否在 buffer cache存在,如果存在且可用,则直接获取该数据而不是从数据库文件中去查询数据,同时根据LRU 算法增加其访问计数;

2)若数据不在缓冲区中,则service process进程将从数据库文件中查询相关数据,并通过service process进程把这些数据放入到数据缓冲区中(buffer cache) ,方便后人。

对于DML 语句(insert 、delete 、update ):

1)检查所需的数据库是否已经被读取到缓冲区缓存中。如果已经存在缓冲区缓存,则直接执行步骤3;

2)若所需的数据库并不在缓冲区缓存中,则service process把数据文件读取到缓冲区缓存中;

3)对想要修改的表取得的数据行锁定(Row Exclusive Lock),之后对所需要修改的数据行取得独占锁;

4)将数据产生的Redo记录到redo log buffer;

5)产生数据修改的undo数据;

6)修改buffer cache;

7)dbwr将修改buffer cache写入数据文件;

IV 提取数据

当语句执行完成之后,查询到的数据还是在服务器进程中,还没有被传送到客户端的用户进程。所以,在服务器端的进程中,有一个专门负责数据提取的一段代码。他的作用就是把查询到的数据结果返回给用户端进程,从而完成整个查询动作。

您可能感兴趣的文档:

--结束END--

本文标题: 体系_sql语句解析执行步骤

本文链接: https://www.lsjlt.com/news/46898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jdbc执行sql语句的步骤是什么
    JDBC(Java Database Connectivity)是用于在Java程序中执行SQL语句的API。执行SQL语句的步骤如...
    99+
    2024-02-29
    jdbc sql
  • oracle执行sql查询语句的步骤是什么
    oracle 执行 sql 查询语句的步骤依次为:词法分析语法分析语义分析查询优化查询执行数据检索数据排序和聚合(如有必要)结果集生成 Oracle 执行 SQL 查询语句的步骤 Or...
    99+
    2024-05-13
    oracle 数据格式化 数据排序
  • MySQL语句执行顺序举例解析
    目录1、SQL数据举例my_user 表数据my_order数据测试数据生成2、SQL的执行顺序1、SQL数据举例 举例:有10个用户,输出在订单表中下单数最多的5个人的名字。 my...
    99+
    2024-04-02
  • SQL语句解析执行的过程及原理
    目录一、sqlSession简单介绍二、获得sqlSession对象源码分析三、SQL执行流程,以查询为例一、sqlSession简单介绍 拿到SqlSessionFactory对象...
    99+
    2024-04-02
  • 【MySQL系列】- SELECT语句执行顺序
    【MySQL系列】- SELECT语句执行顺序 文章目录 【MySQL系列】- SELECT语句执行顺序一、MYSQL逻辑查询处理的步骤图二、MYSQL执行顺序详解2.1 执行FROM操作2....
    99+
    2023-10-21
    mysql android 数据库
  • 一条SQL更新语句的执行过程解析
    目录一、执行过程二、日志模块1、物理日志redo logredo log的使用场景redolog配置2、逻辑日志binlog两阶段提交binlog使用场景前言: 上一篇文章讲解了SQ...
    99+
    2024-04-02
  • MySQL语句执行顺序实例分析
    这篇文章主要讲解了“MySQL语句执行顺序实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL语句执行顺序实例分析”吧!1、SQL数据举例举例:有10个用户,输出在订单表中下单数...
    99+
    2023-06-30
  • 详解一条update语句是怎样执行原理解析
    目录前期准备SQL语句的执行过程server层中的组件介绍Update语句分析redo log(重做日志)redo log存储在哪里?redo log 空间是固定,那它会不会用完呢?binlog(归档日志)redo lo...
    99+
    2022-12-26
    update语句执行原理 update执行
  • sql语句执行缓慢的原因分析
    这篇文章主要介绍“sql语句执行缓慢的原因分析”,在日常操作中,相信很多人在sql语句执行缓慢的原因分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”sql语句执行缓慢的原因...
    99+
    2024-04-02
  • SpringMVC执行步骤、Model的使用详解
    目录第一个SpringMvc HelloWorld无启动类前端操作后台执行步骤第二个SpringMvc项目项目简介知识点整合代码实例:SpringMvc02SpringMvc对res...
    99+
    2024-04-02
  • sql语句执行失败如何解决
    当SQL语句执行失败时,可以采取以下步骤进行解决:1. 检查SQL语句的语法:确保SQL语句没有拼写错误、语法错误或者缺少必要的关键...
    99+
    2023-09-23
    sql
  • SpringMVC执行步骤和使用Model的示例分析
    这篇文章主要为大家展示了“SpringMVC执行步骤和使用Model的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringMVC执行步骤和使用Model的示例分析”这篇文章吧。第一...
    99+
    2023-06-22
  • mysql中执行查询语句的流程分析
    这篇文章给大家分享的是有关mysql中执行查询语句的流程分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比如,在我们从student表中查询一个id=2的信息selec ...
    99+
    2024-04-02
  • c语言执行Hello World背后经历的步骤
    目录预编译编译汇编链接计算机的世界,就从hello,world开始吧! #include <stdio.h> int main() { printf("Hello ...
    99+
    2024-04-02
  • Win7和Vista系统 执行干净启动操作步骤详解
      想必大家也知道在Windows操作系统中执行干净启动功能与作用,不同的windows系统的启动方式也有所差异,那么Win7和Vista系统又该如何执行干净启动呢一起来看看豆豆给大家带来的操作教程吧。   Win7和...
    99+
    2023-06-12
    Win7 Vista系统 干净启动 启动 操作步骤 Vista
  • 怎么解析Oracle SQL语句执行流程与顺序原理
    怎么解析Oracle SQL语句执行流程与顺序原理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 Oracle SQL语句执行流程与顺序原理...
    99+
    2024-04-02
  • 深入理解:Mysql执行SQL语句过程
     开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里默认数据库为mysql),服务器通过sql语句将查询数据的请求传入到mysql数据库。数据库拿到sql语句以后。...
    99+
    2023-06-02
  • SQL查询语句执行顺序的示例分析
    这篇文章主要介绍SQL查询语句执行顺序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL查询语句执行顺序如下:(7) SELECT  (8)&...
    99+
    2024-04-02
  • jdbc执行sql语句错误怎么解决
    当使用JDBC执行SQL语句时遇到错误,可以尝试以下几种解决方法: 检查SQL语句的语法:确保SQL语句的语法是正确的,可以在数...
    99+
    2023-10-24
    jdbc sql
  • MySQL查询语句的执行过程实例分析
    这篇文章主要讲解了“MySQL查询语句的执行过程实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL查询语句的执行过程实例分析”吧!1、MYSQ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作