[置顶] Oracle体系结构(一)---PGA && SGA


   无论开发、管理、优化还是设计,基本原理都是必学的。而基本原理中,体系结构又是首当其冲需要了解的知

识。这几天看了一些关于oracle的文档,跟大家分享一下。


先上一张体系结构图,从宏观上把控一下,对Oracle的体系结构有个印象。

[置顶] Oracle体系结构(一)---PGA && SGA_第1张图片


  Oracle由实例和数据库组成。


  实例是由一个开辟的共享内存区SGA(System Global Area)和一系列后台进程组成的,其中SGA最主要被划分为

共享池(shared pool)、数据缓冲区(db cache)和日志缓冲区(log buffer)三类。后台进程主要包括PMON、SMON、

LCKn、RECO、DBWR、LGWR、ARCH等系列进程。


  数据库是由数据文件、参数文件、日志文件、控制文件、归档日志文件等系列文件组成的。其中归档日志最终可

能会被转移到新的存储介质中,用于备份恢复使用。

  还有一块区域PGA(Program Global Area),PGA也是一块开辟出来的内存区,不同于SGA的是PGA不是共享的,

它是仅供当前发起用户使用的私有内存空间。用于对于数据库发起的无论查询还是更新的任何操作,都是在PGA先预

处理,然后进入实例区域,由SGA和系列后台进程共同完成用户发起的请求。

  首次执行一条SQL命令,首先从磁盘中读取用户连接信息和相关权限信息,并保存在PGA内存里,当再次执行该命

令时,只要该SSESSION不断开连接,连接信息和相关权限直接从PGA内存中读取,减少了物理读。

由此得出,PGA的作用(预处理):

1)、保存用户的连接信息,如会话属性、绑定变量等。

2)、保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限 查询出来,然后

     保存在这个会话区内。

3)、当发起的指令需要排序的时候,PGA正是这个排序区。如上图,用户的请求发起经历的顺序一般为:

     1区->2区->3区或者1区->2区

  通过一条select SQL指令来看一下各区块的合作机制。用户执行该SQL指令时,首先从PGA中做准备工作,同时该

SQL还会立即匹配自己的“身份证”——一条唯一的hash值,接下来进入2区SGA进行处理。首先,进入共享池。该SQL

先查询共享池中是否已经存储过自己的身份证,如果没有那么首先需要查询SQL语句是否正确、语义是否正确、是否

有权限,在这些都没问题的情况下生成这条语句的“身份证”并进行存储。如果找到了匹配的hash值则直接拿来主义

就好了。然后开始进行解析是索引读更高效还是全表扫描更高效。假设比较之后索引读更高效,那么将索引读和生成

的hash值对应在一起进行存储接下来SQL指令就会直奔数据缓存区,在数据缓存区内根据索引列查询满足条件的记

录,但是没有找到怎么办呢?SQL指令继续向上一级3区数据文件区请求,如果找到了就带回数据缓存区,如果还是找

不到那么请求结束,将返回结果给用户。到此一条最普通的SQL指令的执行就结束了。


  简单概述:PGA是私有缓存区,主要缓存用户的登录信息和权限信息,必须是一对一的。SGA则是public属性的共

享内存区执行一条查询命令,如果是第一次执行,共享池和缓冲区内肯定没有缓存的信息,那么执行顺序为:

磁盘读连接信息、权限保存到PGA,然后到共享池进行“安检”,“安检”通过后给你分发一个“通行证”进行存

储,然到数据缓存查不到结果继续到数据库的数据文件中查询。

如果是第二次执行,已经有了通行证则不用再次进行“安检”,直接进入数据缓存区查询结果即可。执行顺序为:

PGA->SGA。


  通过select命令简单介绍了PGA、SGA、共享池和数据缓存区的概念,接下来会继续讲解其他几个文件和各个进

程的工作机制。欢迎继续关注。





你可能感兴趣的:([置顶] Oracle体系结构(一)---PGA && SGA)