我们都知道 Oracle 是通过 SQL 语句来查询或者进行修改的。那么 SQL 从客户端执行开始,经历了哪些进程?哪些 SGA ?是怎么进入到数据文件的呢?请往下看

情况一:在数据库中查询 select

如图所示:

① 客户端输入 SQL,SQL 语句通过网络到达数据库实例,前台进程(服务器进程)接受 SQL 语句, PGA 这时会分配一段空间给前台进程。

② 将 SQL 语句解析为“执行计划”,然后才能执行

解析这部分消耗很多资源: CPU 和 I/O 。

此时 SQL 语句和执行计划都会被缓存在共享池 (shared pool) 中

③ 通过生成的执行计划在数据库缓冲区( buffer cache )和 dbf 文件中找数据

此过程会涉及数据库缓冲区,数据库缓冲区的作用就是缓存 dbf 的数据。所以是首先从数据库缓冲区看是否有数据,有的话就从数据库缓冲区中获取,如果没有就从 dbf 文件中获取。 dbf 中的数据首先会传到数据库缓冲区中。然后在通过前台进程将数据返回客户端。

① ② ③过程都是有前台进程完成

情况二:修改某个表的数据

①  同查询一样,客户端将要求前台进程传输到共享池中,然后到数据库缓冲区读数据。如果数据库缓冲区中没有数据,那么就从 dbf 文件中找, dbf 中的数据会传送到数据库缓冲区,由前台进程进行读取。

②  前台进程在数据库缓冲区中对表进行修改,提交,此时,会产生日志。产生的日志会写到日志缓冲区中。

③  在数据库缓冲区中修改完数据后,此时内存中的数据和数据文件中的数据不一致。需要将内存中的数据写到数据文件中。这个过程由数据库写进程来完成。

④  内存中日志缓冲区产生的日志需要写到日志文件中,这个过程由日志写进程完成。

------------- end ---------------

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2641118/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31529886/viewspace-2641118/

【体系结构】一条SQL语句经历了什么相关推荐

  1. linux sql命令行查询语句不要换行_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?...

    mysql执行一条sql查询语句背后发生了什么呢? 我是李福春,我在准备面试,今天的题目是: mysql的体系结构是怎样的?一条sql语句在mysql的体系结构中经历了什么? 答: mysql体系结构 ...

  2. 面试题:一条 sql 语句是如何经过 MySQL 的体系结构的?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:有了这 4 款工具,老板再也不怕我写烂SQL了个人原创+1博客:点击前往,查看更多 作者:李福春 来源:http ...

  3. mysql怎么刷题_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?

    {port} -u${user} -p ,输入密码. 使用连接器连接服务端: 连接成功之后,权限修改不会影响当前连接,连接的有效期默认是8个小时: 连接之后,执行过程中使用内存会持续增加,应该定时重置 ...

  4. 一条SQL语句从开始到结束到底经历了什么?

    Mysql逻辑架构图 借用很经典的一幅图,先来个全局的了解,SQL执行到底有哪些步骤. Mysql逻辑架构分为两层 第一层Server层 第二层存储引擎层 Server层 连接器 是指通常我们所看见的 ...

  5. mysql select from user_select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?...

    作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: select * from user where id=1 执行完这条语 ...

  6. Python3,多种方法,同时执行多条SQL语句,并把查询结果分别写入不同Sheet页,妥妥的学到了。

    SqlServer查询结果写入多个Sheet页 1.引言 2.代码实战 2.1 openpyxl写入excel 2.1.1 安装 2.1.2 代码 2.2 pandas写入excel 2.2.1 安装 ...

  7. Mybatis 获取当前序列和下一个序列值 以及在一个方法中写多条SQL 语句

    目录 1.Mybatis 获取当前序列和下一个序列值 2.Mybatis 在一个方法中写多条SQL 语句 1.Mybatis 获取当前序列和下一个序列值 #获取当前序列值 select XXX_seq ...

  8. python执行mysql多个sql语句_mysql -- 一次执行多条sql语句

    最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...

  9. mysql数据库会同时执行sql吗_mysql 一次执行多条sql语句

    最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...

最新文章

  1. linux下C++ 插件(plugin)实现技术
  2. Hudson升级异常及解决办法
  3. transepose 矩阵的转置
  4. mysql 分组 字符串_MySQL查询以字符串字段中的数字字符对行进行分组?
  5. python统计图像直方图_计算机视觉7-像素点直方图统计、掩膜图像
  6. javascript立即调用的函数表达式
  7. SQL Sever sa密码丢失
  8. .NET处理异常--zt
  9. 树莓派Linux内核编译选项如何开启TPM 2.0
  10. Docker修炼第一招: 先从Dockerfile开始
  11. iOS底层探索之LLVM(二)——自定义Clang插件(上)
  12. opensips日志配置
  13. 网易云自动化爬虫方案,24小时爬取10万首音乐信息,30万条用户信息,100万个热评
  14. innerHTML, innerText, outerHTML, outerText的区别
  15. Unity 5.3 官方VR教程(二) 创建第一个VR项目
  16. 全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)
  17. 详细安装Adobe Dreamweaver教程和制作第一个网页
  18. 【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信
  19. 分数加减乘除混合运算带答案_100道题,分数加减法混合运算,要答案
  20. SVM要点总结(一)

热门文章

  1. IT销售素质 --善于学习
  2. 使用 MIDP 底层用户接口 API
  3. Python 将 HTML 文件转成指定的编码
  4. 能打开java文件的软件有哪些_使用JAVA打开本地应用程序相关的文件
  5. mysql数据库什么是事件_[数据库]Mysql 事件(定时任务)
  6. 使用Dev-C++查看vector数组中的变量值
  7. Eclipse 安装 Fatjar.jar失败的解决方法
  8. Spring mvc创建的web项目,如何获知和修改其web的项目访问链接名称?
  9. 流利说公布上市后首份财报:第三季净收入1.8亿
  10. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 11 章 索引_11.11. 只用索引的扫描