1.1、SGA(system global area)
SGA是oracle Instance的基本组成部分,在示例启动是分配。是一组包含一个oracle实例的数据和控制信息的共享内存结构。主要用于存储数据库信息的内存区,该信息为数据库进程所共享。
1.1.1、共享池(shared pool)
1)data dictionary cache(缓存的是数据字典信息)
2)library cache
a)编译后的sql语句,当有新的语句来了之后,就从这里找,如果有的话,就直接执行了。
b)也涉及到命中率的问题
c)优化:以绑定变量方式,将where 过滤条件不同而其他相同的语句进行变量绑定,降低硬解析。
3)共享模式的情况下,PGA在共享池中。
4)每一个会话分配一个UGA,UGA在共享池中分配,如果是共享模式,那么久在Large pool中。
1.1.2、数据高速缓存区(database buffer cache)
1)命中率的概念
读内存的时候,如果在DB buffer cache中的话,那么就从内存中返回,如果没有的话,那么久从数据库中读到内存中。从内存中返回的比率越高说明命中率也高,性能相对也会较好。命中率较低的优化:加大内存,也可以将开辟一个keep缓存区,将经常访问的数据放到keep内存中。
1.1.3、重做日志缓存区(redo log buffer)
触发redo log buffer的写入规则
1)三秒钟
2)无论何时,只要有提交
3)三分之一满或者缓存了1M的重做日志数据
4)切换日志或检查点事件
1.2、PGA(program global Areas)
此区域包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反,PGA是只被一个进程使用的私有区域,PGA在创建进程时分配,在终止进程时回收。专用模式下每一个服务器进程分配使用一个PGA。
1.3、内存结构
1)用户进程(user process)
》是一个需要与oracle server交互的程序
》运行于客户端
》当用户运行于某个工具或应用程序时创建,当用户退出上述程序时结束。
》用户向oracle server 发出调用,但它并不与oracle server 直接交互,而是用过server process与oracle server进行交互。
2)服务进程(server process)
》是一个直接与oracle server交互的程序
》与oracle server运行于同一台机器上
》使用PGA执行user process发出的调用,并向user process返回结果状态和结果信息。
3)后台进程(background)
后台进程用于维护物理存储于内存中的数据之间的关系。主要包括:
》SMON:系统监视进程,进程负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事务。
a)实例恢复
b)重做已提交的事务
c)打开数据库
d)回滚未提交的事务
e)合并数据文件中相邻的*空间
f)释放临时段的空间
》PMON:进程监视进程,进程负责监视数据库的处理情况,并负责清除掉死掉的进程。PMON还负责重启失败的调度进程。
a)回滚用户的当前事务。
b)释放相关的锁。
c)释放其他相关的资源。
》DBWn:数据库写入进程,进程负责将脏数据(已经修改但是没有提交的数据)从数据缓存区写回磁盘。当一个事务修改数据块中的数据以后,不需要立即将数据块写回磁盘。由于oracle所采用的先进机制,修改后的数据可以不用立即回写,并且出现故障也不会丢失。因此DBWR可以采取更有效的写回方式,而不用在事务提交完之后立即写回。DBWR通常定时写回数据,除非数据缓冲区需要清空或已满。
数据写回时,采用了最近最少使用原则。对于支持异步io的系统,只需要一个DBWR进程即可,对不支持异步io的可以通过增加DBWR的个数来提升效率。
触发DBWR进程的情况:
#发生检查点
#达到脏缓冲区阈值
#超时
#将表空间设置为脱机或只读
#删除或截断表
#备份表空间
》CKPT:检查点进程,CKPT进程负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件为一直检查点。
SKPT会检查控制文件的SCN和数据文件的SCN是否一直,如果不一致,它会触发DBWR保证数据库的一致性。checkpoint(检查点),是指由DBWR进程将所有修改过的数据缓冲区里的脏数据写回数据文件。CKPT是可选的,如果没有CKPT进程,则有LGWR进程代行这些任务。
a)是DBWR将SGA中所有被修改的数据库缓冲区的内容写入磁盘,无论事务是否被提交
b)用检查点信息更新数据文件头
c)用检查点信息更新控制文件
它可以保证
d)将经常被修改的数据写入磁盘
e)简化实例恢复
》LGWR进程:日志写入进程LGWR负责将日志缓冲区中的数据写入重做日志。由于COMMIT操作依赖于LGWR写回日志(commit操作触发LGWR将日志缓冲区数据写入redo日志),因此系统性能容易受到LGWR的影响。
LGWR的执行要早于DBWR
触发条件:
a)事务提交
b)三分之一的redo日志缓冲区已满
c)每三秒钟
d)在DBWR写磁盘之前
》ARCH进程:归档日志进程,ARCH进程负责将在线重做日志复制到归档存储器,保障redo log文件的完整性。
以上是对oracle体系结构中的一些常用的进程与内存区做一个基础的描述,如果想深入去了解oracle体系结构原因,还是需要找一些详细全面的文档来研究。