加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle 11g 服务器结构

发布时间:2021-01-24 17:09:46 所属栏目:站长百科 来源:网络整理
导读:Oracle 服务器主要又实例、数据库、程序全局区和前台进程组成。 实例可以进一步划分为系统全局区(SGA)和后台进程(PMON、SMON等)两部分,其中,SGA 使用操作系统的内存资源,而后台进程需要使用 CPU 与内存资源。数据库(Database)中包含数据文件(Data
副标题[/!--empirenews.page--]

  Oracle 服务器主要又实例、数据库、程序全局区和前台进程组成。

  实例可以进一步划分为系统全局区(SGA)和后台进程(PMON、SMON等)两部分,其中,SGA 使用操作系统的内存资源,而后台进程需要使用 CPU 与内存资源。数据库(Database)中包含数据文件(Data files)、控制文件(Control files)和重做日志文件(Redo log file),数据库文件存放在硬盘中。程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源。前台进程可以再划分为用户进程和服务器进程,它们需要使用 cpu 与内存资源。

一、系统全局区(SGA)

  系统全局区(System Global Area)是所有用户进程共享的一块内存区域,也就是说,SGA 中的数据资源可以被多个用户进程共同使用。SGA 主要由高速数据缓冲区、共享池、重做日志缓冲区、Java池和大型池等内存结构组成。SGA 随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了。

  1、高速数据缓冲区(Database buffer cache)

  高速数据缓冲区中存放着 Oracle 系统最近访问过的数据块(数据块在高速缓冲区中也可称为缓存块)。当用户向数据库发出请求时,如果在高速数据缓冲区中存在请求的数据则 Oracle 系统会直接从高速缓冲区中读取数据并返回给用户,否则,Oracle 系统会打开数据文件读取请求的数据。

  若无法在高速数据缓冲区中找到所需要的数据,则Oracle 首先从数据文件中读取指定的数据块到缓冲区,然后再从缓冲区将请求的数据返回给用户。由于高速数据缓冲区被所有用户共享,只要数据文件中的某些数据块被当前或其他用户请求过,那么这些数据块就会被装载到高速数据缓冲区中。这样当任何用于再次访问相同的数据时, Oracle 就不必再从数据文件中读取数据,而是可以直接将缓冲区中的数据返回给用户。经常或最近被访问的数据块会被放置到高速数据缓冲区前端,不常被访问的数据块会被放置到高速数据缓冲区的后端,当高速缓冲区填满时,会自动挤掉一些不常被访问的数据块。

  以存取速度来看,内存的读取速度远快于物理硬盘,所以高速数据缓冲区的存在可大大降低对物理磁盘的读取频率,从而达到提高数据库服务器性能的目的。为了便于管理SGA 的内存数据, Oracle 把高速数据缓冲区划分为以下3个部分:

  (1)脏数据区:脏数据区中存放着已被修改过的数据,这些数据等待被写入到数据文件中。当一条更新或删除语句对某些数据库中的数据修改后,那么这些数据块就被标记为 ”脏“,然后等待提交命令并通过后台进程 DBWR 将其写入到数据文件中。

  (2)空闲区:空闲区中的数据块不包含任何数据,这些数据块可以被写入数据,Oracle 可以从数据文件中读取数据块,并将其存放到该区中。

  (3)保留区:保留区包含那些正在被用户访问的数据块和明确保留以作为将来使用的数据块(即缓存块),这些数据块将被保留在缓冲区中。

  2、重做日志缓冲区(Red log buffer cache)

  重做日志缓冲区用于存放数据库进行修改操作时所产生的日志信息,这些日志信息在写入到重做日志文件之前,首先存放重做日志缓冲区中,然后,在检查点发生或重做日志缓冲区中的信息量达到一定峰值时,最后由日志写入进程(LGWR)将此缓冲区的内容写入到重做日志文件。

  重做日志缓冲区的大小由 LOG_Buffer 参数指定,该参数也可以在实例启动后动态修改。相对于高速数据缓冲区而言,重做日志缓冲区的大小对数据库性能的影响较小,通常较大的重做日志缓冲区能减少重做日志文件的对 I/O 的读写次数,对数据库的整体性能有一定的提高。

  3、共享池(Shared pool)

  共享池是 SGA 保留的内存区域,用于缓存 SQL 语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等。共享池包含高速缓冲区(Library cache )和字典高速缓冲区(Dictionary cache)。

  (1)库高速缓冲区时共享池的一部分,主要包括共享 SQL区和私有 SQL区两个组成部分。库高速缓冲区中存放最近用过的 SQL 语句、PL/SQL 语句的文本和执行计划。当下一次执行相同的 SQL 语句或 PL/SQL 语句时,可以直接在库高速缓冲区中找到之前已经生成的执行计划,而不需要再次解析相同的 SQL 语句或? PL/SQL 语句,从而提高系统执行效率。

  每条被缓存的SQL 或 PL/SQL 语句都被分成两个部分,分别被存放在共享 SQL 区和私有 SQL 区中。共享 SQL区存放 SQL或 PL/SQL 语句的语法分析结果和执行计划,如果以后要再次执行类似的语句,则可以利用共享 SQL 区中已缓存的语法分析结果和执行计划。私有 SQL 区存放SQL 语句中的绑定变量、环境和会话等信息,这些信息属于执行该语句的用户的私有信息,其他用户则无法共享这些信息。

  (2)字典高速缓冲区用于存放 Oracle 系统内部管理所需要的数据字典信息,例如用户名、数据对象和权限等。

  共享池的内存空间大小是可以动态改变的,一般通过修改参数 SHARED_POOL_SIZE 的值来实现。

  4、大型池(Large pool)

  大型池在 SGA 区中不是必须的内存结构,只在某些特殊情况下,实例需要使用大型池来减轻共享池的访问压力,常用的情况有以下几种:

  •   当使用回复管理器进行备份和回复操作时,大型池将作为 I/O 缓冲区作用。
  •   使用 I/O? Slave 仿真异步 I/O 功能时,大型池将被当作 I/O 缓冲区使用。
  • ? ? ? ?执行具有大量排序操作的 SQL 语句。
  • ? ? ? ?当使用并行查询时,大型池作为并行查询进程彼此交换信息的地方。

  大型池的缓存区大小是通过 Large_pool_size参数定义的,在 Oracle 11g中,用户可以使用 alter system? 命令动态地修改其缓冲区的大小。

  5、Java池

  用来提供内存空间给 Java 虚拟机使用,目的是支持在数据库中运行 Java 程序包,其大小由 Java_Pool_size 参数决定

  6、流池

  Oracle 流池用于在数据库与数据库之间进行信息共享。如果没有用到 Oracle 流,就不需要设置该池。流池的大小由参数 STREAMS_Pool_size 决定。

二、程序全局区(PGA)

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!