oracle数据库——instance

instance = 内存结构(SGA,system global area) +后台进程

内存结构 = 共享池+数据高速缓存+重做日志缓冲区+其他

后台进程 = DBWn(database writer n个)+LGWR(log writers)+SMON(system monniter)+PMON(progress moniter)+CKPT(checkpoint)+……

PGA(Program Global Area)= 服务器进程+后台进程

下面分别介绍各部分:

共享池

1、共享池用于存放最近执行的SQL语句数据字典信息,其尺寸由初始化参数SHARED_POOL_SIZE定义。共享池主要由库高速缓存数据字典高速缓存两部分组成。

库高速缓存用于存放最近执行的SQL语句信息,包括SQL语句文本,解析代码值及其执行计划。执行计划是SQL语句的内部操作步骤。例如:当执行select name from students where grade=90时,如果grade列上不存在索引,执行计划将采用全表扫描;如果有索引,执行计划将使用索引和ROWID定位数据。

如上图所示,库高速缓存包含许多上下文区,每个上下文区都有相应的SQL语句执行计划,这些上下文区又被称为共享游标。当客户端运行SQL语句时,服务器进程首先检查共享游标是否存在,若存在则按照执行计划直接执行即可;若不存在则生成SQL语句执行计划,并将执行计划存放到相应的上下文区中,然后执行SQL语句。共享游标降低了SQL语句解析的次数,提高了执行性能。

另外,语句1和语句2由于文本不同,所以占用不同的上下文区,而对于文本完全相同的语句1来说可以共享上下文区。所谓的文本完全相同指的是:语句文本相同;大小写和长度相同;赋值变量相同。

数据字典高速缓存用于存放数据字典的信息,包括表、列的定义以及权限信息。

最后,库高速缓存数据字典高速缓存的尺寸是可以变化的。动态改变共享池的尺寸:alter system set shared_pool_size = 60M;

数据高速缓存

数据高速缓存用于存放最近访问的数据块信息,它由许多小缓冲区组成。

数据高速缓存采用LRU(least recently used)算法管理数据高速缓存。

数据高速缓存的结构:分为三部分,分别是脏缓冲区、空闲缓冲区、忙缓冲区。脏缓冲区是指内容与相应数据块不一致的缓冲区;空闲缓冲区是指内容与相应数据块一致或者不包含数据的缓冲区;忙缓冲区是指服务进程正在存取的缓冲区。

重做日志缓冲区

重做日志缓冲区用于记载instance的变化。

后台进程

后台进程是指oracle server隐含执行的进程。启动instance时不仅会分配SGA,还会启动后台进程;关闭intance时不仅释放SGA所占的内存空间,而且会释放后台进程所占用的CPU和内存资源。下面介绍一下常用的后台进程:

SMON(System Monitor):用于执行intance恢复、合并空间碎片并释放临时段。

PMON(Process Monitor)用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。

原文地址:https://www.cnblogs.com/suinuaner/p/oracle_instance.html