Oracle物理体系(二)

来源:互联网 发布:网络写手签约哪个网站 编辑:程序博客网 时间:2024/05/22 00:44

从一条查询简单的sql语句来分析。

  select  name from table whre id=1  首先用户执行这条语句要连接数据库 ,经过PGA区(私有内存区)。这里用户连接信息和用户权限信息保存,只要这里保存的session信息不断开连接,下次系统不用再去硬盘中读取数据,直接从PGA区中获取。此外该SQL还会立即匹配一条唯一的hash值,接下来该SQL指令进入2区进行处理。首先敲开SGA的共享池大门,准备登门拜访。 

 共享次大门打开了,该SQL会在房内查询是否有地方存储过这个SQL指令的身份证(就是唯一HASH值),如果没有的话就得先检查自己的语句语法是否正确、语义是否正确、是否有权限,在这些都没问题的情况下生成这条语句的身份证,唯一的HASH值就被存储下来了。然后就是解析,比如 id列在有索引的情况下是用索引读更高效还是全表扫描更高效!

  Oracle做出这个选择依据就是两种方式都估算一边,看哪个代价更低,用地代价的方式和唯一hash值对应在一起!

  接着该SQL语句就去数据缓冲区宣读圣旨,数据缓冲区立即在tabel中查找id=1的数据,如果没找到就去数据文件中查找,然后带到数据缓冲区展现。所有在数据缓冲区存在对应查找的数据,是不会去数据文件查找的。


从一条简单的更新语句来分析。

  update table set name = 'luopusheng'  where id=1  执行这条语句首先执行查询的步骤,接着在数据缓冲区修改完数据后启动DBWR进程。然后DBWR经常将数据缓冲区的数据刷到数据文件。日志缓冲区保存了数据库中操作日志,记录动作,然后由LGWR进程将日志缓冲区内存写进磁盘的日志文件中记录。目的很简单,就是为了便于将来出现异常情况时,可以根据日志文件中记录的动作,再继续执行一遍,保证数据安全。 


  日志文件也有4个,1写满换到2写,2满切换到3,最后4写满后 ARCH就会把1备份出去 形成 归档文件。


而且Oracle还有个非常重要的进程CKPT,CKPT就是决定什么时候触发DBWR将数据缓冲区写到数据库文件(可以设置某参数来控制CKPT的触发时间)。


如果更新语句执行之后一直不提交会被写到数据文件吗?(会,成为不是由commit(提交)决定,而是由CKPT决定)。

 

在CKPT的触发下,DBWR将数据缓冲区数据写到数据文件,但是如果LGWR出现故障,DBWR是不会停CKPT的命令的,应为Oracle数据库会耐心等待日志完成才执行。

0 0