Oracle实例的概念:
实例(Instance):就是数据库管理系统,处于用户与物理数据库之间的一个中间层软件,由一系列内存结构和后台进程组成。
用户操作数据库的过程实质上与数据库实例建立连接,然后通过实例操作数据库的过程。
内存结构是oracle数据库体系结构的重要组成部分,是oracle数据库重要的信息缓存和共享区域。它的大小、速度直接影响数据库的运行效率。oracle数据库内存管理就是根据数据库运行状态的改变而不断优化内存结构大小的过程。
内存区域信心使用范围的不同,分为系统全局去(SGA)和程序全局区(PGA).oracle支持对着两个的完全自动管理。
后台进程是实例被创建时创建的一些具有特定功能的小程序,在数据库实力启动时被启动,用于监视各个服务器的进程状态,协调各个服务器进程的任务。
数据库与实例的关系
通常数据库和实例是一一对应的,即一个数据库对应一个实例。
在同一台计算机上可以创建多个oracle数据库,当要同时使用这些数据库是,,就要创建多个实例。
SGA
SGA是由oracle分配的共享内存结构,包含一个数据库实例的数据和控制信息。SGA数据供所有的服务器进程和后台进程共享所以称为共享全局区。用户对数据库的各种操作主要在SGA中进行。该内存区随数据库实例的创建而创建,终止而释放。
数据高速缓冲区:是存储的是最近从数据文件中检索出来的数据,供所有用户共享。当用户要操作数据库中的数据时,先由服务器进程将数据从磁盘的数据文件中读取到数据高速缓冲区中,然后在缓冲区中进行处理。用户处理后的结果被存储在
数据高速缓冲区中,最后由数据库写入进程DBWR写到磁盘的数据文件中永久保存。
缓存快的类型:
1.脏缓存块:存储的是已经被修改过的数据。
2.空闲缓存块:它不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。
3.命中缓存块:指那些正在被使用的数据块,同时还有很多回话等待修改或访问的数据块。
4.干净缓存块:指那些当前没有被使用,即将被换出内存的缓存块。
缓存块的管理:在oracle中。采用脏缓存块列表和LRU列表来管理数据高速缓冲区中的缓存块。
LRU列表能保证最频繁使用的数据块始终保存在内存中。
当用户进程需要访问某些数据时,Oracle首先在数据高速缓冲区中寻找,若存在,则直接从数据高速缓冲区中读取并返回给用户,这种情况称为“缓存命中”否则,就要从数据文件中读取到高速缓冲区中,然后再从数据高速缓冲区中读取并返回给用户。
这种情况“缓存失败”
当“缓存失败”的情况,oracle的工作原理是,从LRU列表的尾部开始搜索所需要的空闲缓存。在搜索过程中如果搜索到了一个脏缓存块,则移入脏缓存块列表,然后继续搜索;如果搜索到合适的空闲缓存块,则将数据写入,并把该缓存块移动到LRU列表的头部;
如果搜索了一个数量的缓存块后任然没有找到所需空间缓存块,将停止对LRU列表搜索,然后激活DBWR,将脏缓存块列表中的脏缓存块写入数据文件,同时脏缓存块将恢复为空闲缓存块,并移动到LRU列表中。
数据高速缓冲区的大小不能太大也尽量大。
重做日志缓冲区:用于缓存用户对数据库进行修改操作时生成的重做记录。例如,当用户执行insert ,update等对表进行修改,或者执行create alter等语句创建、修改数据库对象时,oracle都会自动为这些操作生成重做记录,并写入重做日志文件。
而为了提高效率,日志和数据修改一样,不是直接写到日志文件中,而是首先被服务器进程写入重做日志缓冲区中,在一定条件下,再由日志写入进程LGWR把重做日志缓冲区内容写入到日志文件中做永久性保存。
在归档模式下,当重做日志切换时,由归档进程ARCH将重做日志文件的内容写入归档文件中。
重做日志缓冲区的大小对数据性能有较大的影响。由参数LOG_BUFFER参数指定,可以在数据运行期间进行调整。例如
alter system set LOG_BUFFER=30M;
共享池
是用与缓存最近执行过的SQL语句、PL/SQL程序和数据字典,是对SQL语句等进行语法分析、编译、执行的区域。由库缓存和数据字典缓存组成。
库缓存简单的将就是将编译执行过的SQL语句、pl/sql程序缓存在里面,当执行这些时。oracle首先在共享池的库缓存中搜索,这样不用对新的语句进行解析,从而大大提高了系统的执行速度。
数据字段缓存区中保存最常使用的数据字典信息。
共享池的大小由初始化参数文件中的SHARED_POOL_SIZE参数指定。
合适的笑答,可使编译过的程序代码常驻内存,大大降低了重复还行相同SQL语句。
java池是一个可选的内存配置项。提供对java程序设计的支持,用于存储java代码,java语句的语法分析表。由参数java_pool_size控制。
PGA
PGA是一个私有的内存区,不能共享,每个服务器进程只能访问自己的PGA。
PGA由四部分组成
排序区:存放排序操作所产生的临时数据
游标去:存放执行游标操作锁产生额数据
会话去:保存用户会话锁具有的权限、角色、性能统计信息
堆栈区:用于保存会话过程中的绑定变量、会话变量等信息