SQL语句(DQL、DML、DDL)生命周期和体系结构逻辑关系的疑问

问题归档 2019-05-22
25
0 0
摘要:SQL的一些疑问,如客户端会话申请到服务器进程的过程、每一个步骤所涉及的过程和简要机制

问题描述

1 客户端会话申请到服务器进程的过程 比如:客户端发起申请 通过监听发送给服务器进程,服务器进程开辟一个内存区域用来存储客户端会话的相关信息。 会话信息具体存在哪里,谁来管理?等

2 SQL在体系结构内的每一个步骤所涉及的过程和简要机制。比如 服务器进程(PGA)是如何将信息传送到SGA的share pool的什么地方。 语法判断的执行者是谁?怎么执行?数据结果集读取后是存取到库缓存的结果集缓存还是保存在DB BUFFER CACHE?等

 (特别是官方文档上有说明先到share pool进行相同语句的查询,https://docs.oracle.com/cd/B28359_01/server.111/b28318/sqlplsql.htm#CNCPT015

 而官方文档的另外一个部分又说明先进行语法语义解析  https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cncpt/sql.html#GUID-1B95E60C-99C5-446D-9C6B-5D16EFE59ACF

3 数据的返回机制

包括如何返回,PGA承担的工作机制。

最好通俗易懂,不需要深挖内部机制,不要涉及到底层机制。只要能对应上体系机构,比如:返回机制是从谁开始执行,怎么执行,执行要涉及哪些组件,他们承担的具体任务是什么等。我主要是用来串联学习体系结构的各个组件在数据读取,数据操作中的不同作用和相关功能以及内存的通用机制等。官方文档和教材我已经翻了1个星期了,虽然能够大体理解,但是还是很多困惑。所以求这份关系文章,可以是自己的理解,也可以是引荐他人文章。但是要写清楚,有对应,关键地方最好有出处。不甚感谢!!!

专家解答

1、针对问题中两个文档,sql首先进行的解析是“语法解析”,简单来说就是sql是否满足oracle pl sql规范,有没有语法错误等等,与后续的sql parse是不同的概念

2、sql的parse从原理上说是“将人能够理解的sql语句通过波兰式转换,变换为计算机能够理解的调用栈”(当然还要考虑到各个步骤的顺序以进行优化),这个过程由优化、解释器完成。而这个parse的过程需要消耗运算资源(hard parse),所以oracle将解析完成的波兰式(逆波兰式)储存在shared pool中(实际上我们常见的hint就是oracle内部存储的逆波兰式的user interface,执行计划则是在此之上进一步优化人机界面的user interface),如果后续有相同的sql需要运行,就不必再重复parse一遍,可以直接把之前生成的调用栈拿来用,这就是soft parse。逆波兰式解析相关知识,可以阅读《 C Programming Language》中解释编译原理的递归下降四则运算器部分,和《c++沉思录》中面向对象方式实现解释、编译器的部分。

3、生成调用栈后,就按照这个调用栈进行诸如读取磁盘、结果集过滤、结果集关联等等函数调用操作。

4、把上面3点理解为“要数据库干什么”,会话信息的意义就是“谁在发布命令、干完以后把结果反馈给谁”,这些信息主要存储在pga中的uga内存区域,pmon、smon等进程都可以对这块内存区域进行读写。

5、pga、buffer等等内存中的信息如何传递的问题,可以自己写一段代码,读取一块共享内存,在私有内存中处理一下,再写入到另一块共享内存,基本原理是一样的,只是oracle的代码会在鲁棒性、性能、安全等等考虑非常全面。

6、rdbms原理是ibm公司在1976年提出的,oracle是rdbms的一种实现,rdbms还有其他很多中实现。如果想理解rdbms的原理,可以读一下开源数据库的源代码,有一定的编程经验对数据库的理解非常有帮助。

「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
近期活动
全部
相关课程
全部