第一篇 Oracle数据库体系结构之实例
Oracle数据库服务器由Oracle数据库和Oracle实例组成。
Oracle数据库主要由一些数据文件组成,数据库的必须文件是控制文件、联机重做日志文件以及数据文件,外部文件则包括初始化参数文件、口令文件与归档的重做日志文件。
Oracle数据库主要由一些数据文件组成,数据库的必须文件是控制文件、联机重做日志文件以及数据文件,外部文件则包括初始化参数文件、口令文件与归档的重做日志文件。
Oracle实例主要由内存结构(系统全局区(System Global Area,简写为SGA)和程序全局区(Program Global Area 简称PGA))和后台进程组成。
其中,系统全局区SGA是一块共享的内存区域,包含实例的控制信息和数据,多个用户可以在此区域共享数据,避免从磁盘进行重复、耗时的访问,包括数据库缓存高速缓冲区、重做日志缓冲区、共享池、大池、Java池等;
程序全局区PGA是由一个单一的Oracle数据库服务器进程使用的内存区域,每一个服务器进程有它自己的PGA,PGA用来处理SQL语句(排序等)和保存登录和其他会话信息。
后台进程管理内存结构、异步I/O将数据写入磁盘上的文件中,并执行常规的维护任务。后台进程整合了由每个用户进程运行的多个Oracle数据库程序处理的函数,监视其他Oracle数据库进程,以提供更高的并行性,从而提高数据库性能和可靠性。后台进程包括数据库写入器DBWn、日志写入进程LWGR、检查点进程CKPT、系统监视器SMON、过程监视器PMON、归档进程ARCn等。
SGA组件
内存结构组件 | 描述 |
数据库缓冲区高速缓存 |
在查询或修改存储在数据库的数据之前,必须从磁盘读取数据并将其存储在缓冲区高速缓中, 连接到数据库的所有用户进程共享对缓冲区高速缓存的访问。为了获得最佳性能,缓冲区缓存应该足够大,以避免频繁的磁盘I/O操作。 |
重做日志缓冲区 | 通过缓存重做信息来提高性能,直到他可以写入存储在磁盘上的 物理联机重做日志文件。 |
共享池 | 共享池缓存用户共享的信息,主要包括库缓存和数据字典缓存。 库缓存;是一个内存区域,用于以解析后的形成存储最近执行的代码。通过在共享池中高速缓存已解析的代码,避免硬解析,从而提升性能; 数据字典缓存:存储最近使用的对象定义,包括对表、索引、用户描述以及其他元数据的定义,将上述这些定义存储在内存中,就不必重复读取磁盘上的数据字典,从而能够提高性能。 |
大池 | 一个可选区域,用于缓存各种服务器进程的大型I/O请求。 |
Java池 | 用于Java虚拟机(JVM)中的所有特定于回话的JAVA代码和数据的内存区域。 |
Streams池 | Oracle Streams功能使用的内存区域。 |
结果缓存 | 缓存查询结果,如果运行的查询的结果存储在结果缓存中,则数据库从缓存中返回查询结果,而不是重新运行查询,这个SGA组件加速了频繁运行的查询的执行。 |
后台进程组件
后台进程组件 | 描述 |
数据库写入器(DBWn) | 数据库写入器将修改的块从数据库缓冲区高速缓存写入磁盘上的文件,Oracle数据库最多允许36个数据库写入器进程。 需记住的是:没有任何会话能够不断的更新磁盘上的数据。会话只更新数据库高速缓冲区中的数据,随后,所有更新都通过DBWn汇集写入磁盘,通常,DBwn尽可能少和尽可能不频繁的进行写入操作。 |
日志写入器(LGWR) | 日志写入器进程将在SGA的重做日志缓冲区中生成的重做日志条目顺序的写入联机重做日志文件中,即将应用于数据库高速缓存区中数据的所有变化写入磁盘上的联机重做日志文件。与DBWn不同的是,这种磁盘写行为尽可能接近于实时完成。 |
检查点(CKPT) | 在特定时间,所有在SGA中修改的数据库缓存通过数据库写入器写到数据文件,这个事件叫做检查点,检查点处理DBWn信号,更新数据文件和控制文件,并记录此次更新的时间。CKPT进程能够确保实例不时的与数据库同步。 |
系统监视进程(SMON) | 当重新启动失败的实例时,系统监视器会执行实例恢复。 打开数据库,从而支持实例和数据库之间的连接。 |
进程监视器(PMON) | 管理用户会话,当用户进程失败时,进程监视器执行恢复,它清理缓存并释放失败进程正在使用的资源。 |
归档进程(ARCn) | 数据库必须在归档模式才能运行归档进程。 当日志已满或发生日志切换时,归档进程将联机重做日志文件复制到归档存储。 |
可管理性监视器(MMON) | 此过程执行各种管理相关的后台任务,例如: 当给定指标违反其阈值时发出警报; 通过产生其他进程拍摄快照; 捕获最近修改的SQL对象的统计值。 |
作业队列进程(CJQ0和Jnnn) | 作业队列进程通常以批处理模式运行用户作业。 |