Oracle 物理体系

Oracle  物理体系数据库

  • Oracle 物理体系
  • 问题
  • 参考资料

 

Oracle 物理体系缓存

 

NewImage

 

 

PGA:program global area ,私有不共享内存。session

PGA起到预处理的做用:性能

1.保存用户的链接信息,如session属性,绑定变量等;spa

2.保存用户权限等重要信息;日志

3.须要排序时,PGA就是排序区;blog

 

SGA:system global area,共享内存。排序

SGA由下组成:进程

1.共享池ip

2.数据缓冲区

3.日志缓冲区

 

后台进程:

1.PMON:process monitor 进程监视器

2.SMON:system monitor 系统监视器

3.DBWR:database writer 将数据缓冲区的数据刷到磁盘数据文件中

4.LGWR:log writer 将日志缓冲区的数据刷到磁盘日志文件中

5.CKPT:checkoutPoint 触发DBWR,批量将数据缓冲区的数据刷到磁盘中。并不是是commit操做触发DBWR,由于批量操做比单次操做效率高。

6.ARCH 归档日志文件

……

 

数据库:

1.数据文件

2.参数文件

3.控制文件

4.日志文件

 

SGA+后台进程 = 数据库实例;

Oracle服务 = 实例(内存+进程)+ 数据库(磁盘文件);

在多实例数据库环境下,实例和数据库是多对一的关系,可是在大部分状况下是一对一。

 

SQL语句在物理体系中的流转过程:

1.SQL进入PGA进行预处理。保存链接信息,权限信息。若是有排序指令,则进行排序,PGA就是排序区。若内存不够,超出的部分须要到临时表空间中进行排序,即在磁盘中完成排序。只要session不断开链接,下次系统不须要再到磁盘中读取相关的链接信息和权限信息,直接从PGA内存空间中获取。

2.SQL匹配一条惟一的HASH值,进入SGA进行处理。先在共享池中查询是否有存储该HASH值,如有,则跳过语法语义检查、权限检查、解析,直接得到执行计划。若无,则先进行语法语义检查,权限检查,没有问题的话生成该条SQL的惟一HASH值并保存下来。而后进行解析,解析该SQL执行计划。完成解析后将执行计划保存起来,并和HASH值对应起来。

3.SQL进入数据缓冲区,检查是否有须要的数据,若无,则按照执行计划到磁盘数据库文件中查找,找到了就带着数据返回到数据缓冲区。

4若是SQL语句是查询语句,则到第三步,即完成了SQL语句。若是是更新语句,则要遵循 “日志现行” “凡事有记录”的原则,记录日志,而且要保存数据的前镜像。而后才进行更新操做。

 

Tips:

1.由于Oracle有缓存的功能,若是有缓存SQL相应的链接信息,权限信息,执行计划,数据等,不用去磁盘上读取,能够减小物理读。因此执行相同的SQL,第二次比第一次快。

2.若是PGA内存分配过小,排序量太大,部分排序须要到磁盘上进行,IO操做增多,会下降性能。

3.commit不能触发DBWR,而是CKPT触发,是由于批量操做效率优于单次操做。

4.保存数据前镜像,能够实现回滚和数据的一致读。

 

问题

1.Oracle为何要有归档日志文件的操做,为何不直接将日志缓冲区中的日志信息保存到归档文件中。

2.没有commit,DBWR也会将数据刷到磁盘数据库文件中?

 

参考资料

“收获,不止Oracle”

相关文章
相关标签/搜索