1区:PGA(私有不共享内存区域)当请求的指令发出的时候,先在1区中进行预处理。
作用:1:保存用户的连接信息。如:会话属性,绑定变量。
2:保存用户的权限等重要信息。当用户和数据库进行交互的时候,会查出用户的权限,然后把这个用户的权限的信息保存到PGA中。
3:排序。发出的指令需要排序的时候,先在这里面进行排序,前提是内存够用的情况下。不能的话就在临时表空间中进行排序。也就是在磁盘中进行排序。
用户的请求经历:1区-----》2区-----》3区。或者1区-----》2区
一条SQL的运行:先在磁盘中读取,然后语法检查,解析字段等操作。
1:用户首次进行SQL的运行时,先从磁盘中获取用户的连接信息和相关的权限信息。然后保存到PGA中。由于SESSION没有断开,再次进行查询的时候,这些物理读就不用再进行操作了。
2:SQL指令结束后,会在SGA区中的共享池中保留一个HASH值。这个值保存了语法检查信息和执行计划等相关解析动作的操作。
3:当第一次执行的时候,数据一般不在数据缓存区中,而是从磁盘中获取。不可避免产生物流读,当第一次查询后,这条数据会保存到数据缓存区中,然后第二次执行的时候,直接从数据缓冲区中找就行了,避免了物理读。
回滚的研究:
1):先查询出来,是否在数据缓冲区中,不存在的话从磁盘中读取到数据缓冲区中。
2):在回滚表空间的相应回滚段事务表上分配事务槽,从而在回滚表空间分配到空间。这个动作是需要记录日志写进日志缓冲区中的。
3): 在数据缓冲区中创建object_id=29的前镜像。这个前镜像数据也会写进磁盘的数据文件中的(回滚表空间的数据文件)从缓存区中写进磁盘中的规律:由CKPT决定,也会写进日志缓存区中。
4):然后这个时候可以进行修改了,object_id=29修改成object_id=92.也是需要记录写进日志缓存区中的。
5): 这个时候用户提交了信息,日志缓存区立即记录这个提交信息。然后把回滚段事务标记为非激活INACTIVE状态,表示允许重写。
6): 执行回滚:Oracle需要从回滚段中将前镜像object_id=29的数据读出来,修改数据缓存区,完成回滚。这个过程也是需要写进日志缓存区中的。
回滚段的相关参数:undo_management
第一个AUTO是:自动回滚段管理,当回滚段空间不够的时候,自动拓展。
第二个:DML语句需要记录前镜像,当COMMIT后,表示回滚段保留的前镜像被打上了可以覆盖重新使用的标记,但是要900秒后才可以。
第三个:回滚段表空间的名字