基本组件概览
Oracle 体系结构包括很多基本组件,将详细介绍这些组件。
Oracle 服务器:Oracle 服务器中包含多种文件结构、进程结构和内存结构;但是,处理 SQL 语句时,并非所有这些结构都会用到。某些结构用于提高数据库的性能,确保该数据库在遇到软件或硬件错误时可以恢复,或者执行维护该数据库所需的其它任务。Oracle 服务器包括一个 Oracle 例程和一个 Oracle 数据库。
数据库服务器是信息管理的关键。一般来说,服务器必须可靠地管理多用户环境中的大量数据,以便多个用户能够同时访问同一数据。所有这一切都必须在保证高性能的同时进行。数据库服务器还必须防止未经授权的访问,并为故障恢复提供有效的解决方案。
Oracle 例程:Oracle 例程是后台进程和内存结构的组合。只有启动例程后,才能访问数据库中的数据。每次启动例程时,会分配系统全局区 (SGA) 并启动 Oracle 后台进程。后台进程代表调用进程执行各种功能。它们把为每个用户运行的多个 Oracle 程序所处理的功能统一起来。后台进程执行输入/输出 (I/O),并监视其它 Oracle 进程来提高并行性,从而使性能和可靠性更加优越。
Oracle 例程由系统全局区 (SGA) 内存结构和用于管理数据库的后台进程组成。例程是通过使用特定于每个操作系统的方法来标识的。例程一次只能打开和使用一个数据库。 建立连接和创建会话用户只有在连接到例程后,才能向 Oracle 数据库提交 SQL 语句。 用户启动 SQL*Plus 之类的工具,或者运行使用 Oracle Forms 之类的工具开发的应用程序。该应用程序或工具将作为用户进程来执行。
在最基本的配置中,用户登录到 Oracle 服务器时,运行 Oracle 服务器的计算机上就会创建一个进程。这个进程称为服务器进程。服务器进程代表客户机上运行的用户进程与 Oracle 例程进行通信。服务器进程代表用户执行 SQL 语句。
连接:连接是用户进程和 Oracle 服务器之间的通信路径。数据库用户可以采用以下三种方式之一连接到 Oracle 服务器:
用户登录到运行 Oracle 例程的操作系统上,然后启动访问该系统中的数据库的应用程序或工具。通信路径是使用主机操作系统上的进程间通信机制建立的。
用户在本地计算机上启动应用程序或工具,然后通过网络连接到运行 Oracle 例程的计算机。在这个称为客户机/服务器的配置中,用户和 Oracle 服务器使用网络软件进行通信。 在三层连接中,用户计算机通过网络与应用程序服务器或网络服务器进行通信,这些服务器又通过网络与运行 Oracle 例程的计算机连接。例如,用户在网络中的一台计算机上运行浏览器来使用位于 NT 服务器上的应用程序,该 NT 服务器又从 UNIX 主机上运行的 Oracle 数据库中检索数据。
会话:会话是用户与 Oracle 服务器的一种特定连接。会话在 Oracle 服务器验证用户后启动,当用户退出或出现异常终止时会话结束。对某个具体的数据库用户来说,如果该用户从很多工具、应用程序或者终端同时登录,则可能有很多并发会话。除了一些专用的数据库管理工具以外,启动数据库会话还要求 Oracle 服务器可供使用。
注:在此处所讲的连接类型中,用户进程和服务器进程之间存在一对一的通信关系,这称作专用服务器连接。使用共享服务器 (Shared Server) 配置时,多个用户进程可以共享服务器进程。 Oracle 数据库:Oracle 数据库包含操作系统文件(也称为数据库文件),这些文件为数据库信息提供了实际的物理存储。数据库文件用于确保数据一致性并能在例程失败时得以恢复。 数据库的一般用途是存储和检索相关信息。Oracle 数据库具有逻辑结构和物理结构。数据库的物理结构是数据库中操作系统文件的集合。Oracle 数据库包含以下三类文件:
数据文件,包含数据库中的实际数据
重做日志文件,包含数据库的更改记录,可以在出现故障时恢复数据 控制文件,包含维护和验证数据库完整性所需的信息
其它关键文件:非数据库文件用于配置例程、验证特权用户以及在磁盘出现故障时 恢复数据库。 Oracle 服务器还使用一些其它文件,这些文件并不是数据库的一部分:
参数文件,用来定义 Oracle 例程的特性。例如,它包含调整 SGA 中一些内存结构大小的参
数。
口令文件 验证哪些用户有权启动和关闭 Oracle 例程。
归档的重做日志文件 是重做日志文件的脱机副本,当必须从介质失败中进行恢复时可能会需要
这些副本。
用户进程和服务器进程:执行 SQL 语句时,用户进程和服务器进程是其中涉及的主要进程;
但是,其它进程也会有助于服务器完成 SQL 语句的处理。
其它进程:还有很多供其它选件使用的其它进程,例如,高级排队 (Advanced Queuing)、实时应用集群 (Real Application Clusters)、共享服务器 (Shared Server) 和 高级复制 (Advanced Replication) 等。
物理结构
Oracle 数据库的物理结构包括以下三种文件类型:控制文件、数据文件和重做日志文件。
内存结构
Oracle 的内存结构由两个内存区组成,分别是:
系统全局区 (SGA) :在例程启动时分配,是 Oracle 例程的基本组件 程序全局区 (PGA) :在服务器进程启动时分配
系统全局区 (SGA)
SGA包括以下几种内存结构:
共享池 数据库缓冲区高速缓存 重做日志缓冲区 其它结构(例如锁定和栓锁管理以及统计数据)
在SGA中还可配置其它两种内存结构: 大型共享池 Java 池
SGA 也称作共享全局区,用于存储数据库进程共享的数据库信息。它包含有关 Oracle 服务器的数据和控制信息,在 Oracle 服务器所在计算机的虚拟内存中分配。 要查看 SGA 内存的分配情况,可以使用下面的语句: SQL> SHOW SGA: 动态 SGA:
从 Oracle9i 开始,动态 SGA 实施了一种体系结构,可以对 SGA 配置进行更改,而不必关闭例程。这样,在不关闭例程的情况下,就可以更改数据库缓冲区高速缓存和共享池的大小。因此,开始时可将数据库缓冲区高速缓存和共享池配置为一个较小的值,然后根据它们各自的工作量增减,但最大值不能超过由 SGA_MAX_SIZE 指定的值。
调整 SGA 的大小:
SGA 的大小由几个初始化参数决定。对 SGA 的大小影响最大的参数有:
DB_CACHE_SIZE:标准块的高速缓存大小。对于 UNIX,缺省值是 48 MB,对于 NT, 缺省值是 52 MB
LOG_BUFFER:为重做日志缓冲区分配的字节数
SHARED_POOL_SIZE:专用于共享 SQL 和 PL/SQL 的内存区的大小(以字节为单位)。缺省值是 16 MB。如果是 64 位,则缺省值是 64 MB
LARGE_POOL_SIZE:大型共享池的大小。缺省值是零(如果未将 init.ora 参数 PARALLEL_AUTOMATIC_TUNING 设置为 TRUE,则自动计算缺省值。) JAVA_POOL_SIZE:Java 池的大小。缺省值是 24 MB
因此,SGA 的大小不能超过 SGA_MAX_SIZE - DB_CACHE_SIZE - LOG_BUFFER – SHARED_POOL_SIZE - LARGE_POOL_SIZE - JAVA_POOL_SIZE。 分配单位:
粒组是一个连续虚拟内存分配单位。粒组的大小取决于估算的 SGA 的总大小,这个总大小是根据参数 SGA_MAX_SIZE 的值计算的。
如果估算的 SGA 的大小小于 128 MB,那么粒组大小是 4 MB 否则为 16 MB
组件(数据库缓冲区高速缓存和共享池)能够以粒组为单位进行增减。对于拥有粒组的每个组件而言,分配给该组件的粒组数、对该组件执行但暂时挂起的任何操作(例如,通过 ALTER SYSTEM 分配粒组、通过 ALTER SYSTEM 释放粒组,相应的自身优化),以及以粒组为单位的目标大小都将由 V$BUFFER_POOL 视图来跟踪和显示。启动例程时,Oracle 服务器将分配粒组条目,每个粒组使用一个条目来支持 SGA_MAX_SIZE 字节的地址空间。继续启动时,每个组件将根据需要获取足够的粒组。SGA 的最低配置是三个粒组(一个粒组用于固定的 SGA(包括重做缓冲区);一个粒组用于数据库缓冲区高速缓存;另一个粒组用于共享池)。
共享池
用于存储:最近执行的 SQL 语句 最近使用的数据定义
它包括以下两个与性能相关的关键内存结构: 库高速缓存 数据字典高速缓存
其大小由 SHARED_POOL_SIZE 参数确定
共享池环境既包含固定结构,也包含可变结构。固定结构的大小相对保持不变,而可变结构的大小会根据用户和程序的需求增减。固定结构和可变结构的实际大小由一个初始化参数和 Oracle 内部算法来确定。 调整共享池大小:
由于共享池用于可以全局共享的对象,如可重复使用的 SQL 执行计划、PL/SQL 程序包、过程、函数和游标信息,所以必须对它的大小进行调整,以满足固定区和可变区的需要。分配给共享池的内存由 SHARED_POOL_SIZE 初始化参数确定。使用 ALTER SYSTEM SET,便可以动态地重新调整它的大小。经过性能分析后,就可以调整它的大小,但 SGA 的总大小不能超过 SGA_MAX_SIZE。 库高速缓存
库高速缓存的大小视所定义的共享池大小而定。内存分配是在对语句进行语法分析或调用程序单元时进行。如果共享池的大小太小,就会将语句连续重新载入库高速缓存,从而使性能受到影响。库高速缓存由算法 LRU 来管理。高速缓存填满时,将从库高速缓存中删除最近很少使用的执行路径和语法分析树,以便为新条目腾出空间。如果某些 SQL 或 PL/SQL 语句未再次使用,它们最终会被删除。
库高速缓存包括以下两个结构:
共享 SQL:共享 SQL 为针对数据库运行的 SQL 语句存储并共享执行计划和语法分析树。下次运行同一 SQL 语句时,这个语句就能利用共享 SQL 提供的语法分析信息来加快其执行速度。要确保 SQL 语句随时可以使用共享 SQL 区,文本、方案和绑定变量必须完全相同。 共享 PL/SQL:共享 PL/SQL 区存储并共享最近执行的 PL/SQL 语句。经过语法分析和编译的程序单元和过程(函数、程序包和触发器)都存储在这个区中。 数据字典高速缓存
数据字典高速缓存也称作字典高速缓存或行高速缓存。将数据字典信息同时高速缓存到数据库缓冲区和共享池内存中,可以提高性能。有关数据库(用户帐户数据、数据文件名、段名、区的位置、表的说明和用户权限)的信息都存储在数据字典表中。当服务器需要用到这类信息时,将会读取数据字典表,返回的数据将存储在数据字典高速缓存中。 调整数据字典的大小: