欢迎光临
我们一直在努力

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



我们都知道

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 —————






 


 

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。