首先发起一条sql指令
select object_name from t where object_id=29
第一步
该sql指令先进入1区PGA,该指令在这里主要完成了两件事情:
1)连接信息的保存
2)权限的保存
只要session不断开连接,下次系统不用再去硬盘中读取数据,而直接从PGA内存中获取。
此外,该sql还会立即匹配成一条唯一的HASH值。
第二步
sql指令进入2区,首先访问SGA的共享池,检查是否有存储过这个sql指令的HASH值
如果没有:
1)检查语法是否正确
2)检查语义是否正确
3)检查是否有权限
如果都没有问题,就生成唯一的HASH值存储起来。
object_id建立索引的情况下,接下来开始解析代价获取执行计划,是使用索引读呢,还是使用全表扫描。
被选定的执行计划会被存储起来,并与之前的HASH值对应在一起。
第三步:
sql指令来到了数据缓冲区
从t表中查询object_id为29的记录。
如果没有查到的话,就要进入3区database的数据文件中去查询,如果查到了,就将数据带回数据缓冲区,并展示出来。
至此,一条普通的sql指令就完成了。