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)用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。