《深入解析Oracle》学习笔记(7)---Oracle体系结构之软件结构

news/2024/7/20 14:40:30 标签: 数据库, 操作系统, 内存管理

[声明:本文是学习著名ORACLE DBA盖国强先生的大作《深入解析ORACLE--DBA 入门 进阶与诊断案例》的学习笔记与心得体会。在此声明,文中摘录了书中部分内容,非是出于抄袭目的,而是有感于盖国强先生所写确实经典。在此声明对原作者的尊重与敬佩。]

第五章 Oracle内存管理

Oracle内存管理是建立在对Oracle内存结构的精通基础上的,下面是我对Oracle内存结构的理解,简述如下,欢迎指正。

Oracle软件结构由内存结构和进程结构组成。
Oracle数据库的软件结构就是“Oracle实例”,在启动Oracle数据库时,Oracle首先要在内存中获取、划分、保留各种用途的区域-----内存结构;运行各种后台进程-----进程结构。
这就是一个实例。该实例负责挂载、打开数据库,之后由这个实例访问和控制数据库的各种物理结构、执行SQL语句、调整数据库性能。
实例是用户与数据库之间的一个中间层。
一.内存结构:包括SGA和PGA,另外还包括软件代码区。
1.SGA(System Global Area-系统全局区):Oracle的心脏。每个实例只有一个SGA。所有的用户进程、所有的服务器进程可以共享同一个SGA,是用户与服务器通信的中心。
主要由数据高速缓存、重做日志高速缓存、共享池组成。SGA在实例启动时创建,实例关闭时释放。
SGA包括:
固定区域(Fixed Area)、共享池(Shared Pool)、数据高速缓存区(Buffer Cache)、重做日志缓存区(Redo Log Buffer)、java池(java pool)、大池(large pool)、流池(stream pool)。
2.PGA(Program Global Area-程序全局区):PGA在用户进程连接到数据库并创建一个对应的会话时,由Oracle为服务器进程分配的专门用于当前用户会话的内存区。这个内存区时非共享的、不可写的,
只有服务器进程本身才能访问对应的PGA。PGA大小由操作系统决定、PGA内容由专业服务器模式还是共享服务器模式决定。
会话终止时,PGA被自动释放。
主要由排序区、会话区、游标状态区、堆栈区组成。
.排序区
在专用服务器模式下,PGA中才存在排序区,在共享服务器模式下,排序区和私有SQL区是在SGA中。
由参数SORT_AREA_SIZE决定,而另一个相关的初始化参数SORT_AREA_RETAINED_SIZE的值则决定了在排序结束后,排序区保留的内存大小,这部分内存并不归还给操作系统,而是随时待命下一次排序。
若排序区空间不够,会启用临时表空间的临时段来暂存中间排序结果,待所有排序结束后,再将整合后的排序结果从临时表空间的临时段中取出。因此,要针对业务合理设置SORT_AREA_SIZE参数值,
避免排序区与临时表空间之间的数据交换,使排序工作在内存中完成。
.会话区
存储会话所具有的权限、角色、性能统计信息。
.游标状态区
存储了会话中,当前使用的各个游标的状态。
.堆栈区
存储会话中的绑定变量、会话变量、SQL语句运行时的内存结构等信息。

二.进程结构:包括用户进程和服务器进程。
1. 用户进程
当用户在客户端启动一个Oracle数据库的应用程序时,就会在客户端创建一个Oracle的用户进程,以便执行相应的任务。
与用户进程相关的两个概念是连接和会话。
.连接:
用户登录到Oracle服务器,Oracle在服务器上产生一个服务器进程,该服务器进程代表运行在客户端的用户进程与服务器通信。用户进程与服务器进程之间就是一个连接。
.会话:
建立连接后,就自动创建一个会话,但若该会话使用完毕后,直接更换用户,那么旧的会话将被新的会话替换,但仍然在原来的连接上。除非断开连接后者网络中断。
2. Oracle进程
包括服务器进程和后台进程。
2.1 服务器进程:
是给客户端的用户进程提供服务的,用户进程必须通过服务器进程才能访问数据库。服务器进程分为专用服务器进程(只为一个用户进程提供服务)和共享服务器进程(可以为多个用户进程提供服务)。
在专用服务器模式下:客户端的用户进程和服务器端的服务器进程一一对应,Oracle会为每个连接启动一个服务器进程,用户进程必须将请求发给服务器进程才能访问数据库,服务器进程执行具体的命令后返回结果给用户进程。
因为这个连接用于专门处理该客户端的所有请求,所以直到用户主动断开连接或网络出现中断该服务器进程才会停止。专用服务器进程所需要的资源全部在PGA中分配。
在共享服务器模式下:Oracle会在服务器端启动一定数量的服务器进程,多个客户端用户进程请求共享同一个Oracle服务器服务进程,一个服务器的进程响应多个用户连接,
共享连接在实例一启动,就分配指定数量的服务器进程,所有用户的连接,以排队的方式,由分配器指定给服务器进程,其它的进程排队等待,只要用户的请求执行完毕,服务器进程就会马上断开连接,分配器会把空闲的服务器进程分配给其它排除的进程。
采用共享连接可以有效的提高服务器资源的利用率,但是对一个分配器,只支持一种协议,每个分配器有自已的排队队列,在请求的任务完成后,由分配器将操作结果返回给相应的用户进程。但是共享连接的建立, 需要Oracle的监听进程、分配器、共享服务器进程才能共同完成一个连接的创建,所以连接的分配也需要一定的时间和资源。
服务器进程主要完成如下任务:
.解析并执行用户提交的SQL语句。
.搜索SGA的数据库缓存,如果数据不在SGA的数据库缓存中,则将其从数据文件中读入。
.将结果返回给用户。
2.2 后台进程:
主要完成如下任务:
.在内存和外存之间进行I/O操作。
.监视各个进程的状态。
.协调各个进程的任务。
.维护系统的性能。
.保证系统的可靠性。
后台进程包括:DBWn(DataBase Writer,数据库写进程),LGWR(Log Writer,日志写进程),CKPT(ChecKPoint,检查点进程),SMON(System MONitor,系统监视进程),
PMON(Processor Monitor,进程监视进程),ARCn(Archive,归档进程),Dnnn(Dispatcher,调度进程),RECO(RECOverer,恢复进程),LCKn(LoCK,锁进程)。

根据两种连接的创建方法和管理方法,一般来说:
对于长事务或大事务,使用专用连接,可以有效的提高系统的性能,减少用户等待和事务的排队,提高系统的利用率,如OLTP,BI等。
对于超短事务和短事务、小事务,使用共享连接方式,可以在资源与效率之间达到一种平衡,比如网站,信息管理系统等。


http://www.niftyadmin.cn/n/1754705.html

相关文章

Quartz的监听器

Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。类似于任务执行过程中的邮件、短信类的提醒。 Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务、触发器、调…

windows下安装ssh

1)安装Cygwin (http://www.cygwin.com/) 2)安装openssh 3)启动Cygwin Bash Shell $ ssh-host-config*** Info: Generating /etc/ssh_host_key*** Info: Generating /etc/ssh_host_rsa_key*** Info: Generating /etc/ssh_host_dsa_key*** Info: Creating default /etc/ssh_c…

linux在终端系统调用,技术|在 Linux 上用 strace 来理解系统调用

使用 strace 跟踪用户进程和 Linux 内核之间的交互。系统调用system call是程序从内核请求服务的一种编程方式,而 strace 是一个功能强大的工具,可让你跟踪用户进程与 Linux 内核之间的交互。要了解操作系统的工作原理,首先需要了解系统调用的…

Configuration Manager v.Next Beta 1客户端所支持的操作系统

Operating System x86 x64 Windows XP Professional Service Pack 3√Windows XP Professional for 64-bit Systems Service Pack 2√Windows Vista Business EditionWindows Vista Enterprise EditionWindows Vista Ultimate EditionWindows Vista Business Edition SP1√√Wi…

PHP解码chunked编码的数据

在使用fsockopen获取网页内容时,服务端有时会返回chunked编码(头信息为Transfer-Encoding: chunked)的数据,新版的PHP中并不包含http_chunked_decode函数,根据HTTP协议chunked编码的规则,不难自己实现http_chunked_decode函数的功…

前端vue入门(纯代码)20

总以为自己还很年轻,却忽略了岁月的脚步,当身边的一道道风景变成了回忆,才忽然发现,风景依然在,而人已非少年。!!! 【22.求和案例--纯Vue版本】 太简单了,直接上代码案…

TriggerBuilder详解

TriggerBuilder是⽤来创建触发器Trigger的。它与JobBuilder在整体结构或者说设计风格上可以说是⼀模⼀样的,同样采⽤Builder模式。 以下为TriggerBuilder类中的api说明: 1、TriggerBuilder.newTrigger() 调用自己的无参构造方法,创建⼀个新…

linux嵌入式工程师描述,嵌入式Linux工程师的成长经历,想做大牛应该具备如下素质-嵌入式系统-与非网...

从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步。下面是嵌入式 Linux 开发工程师的成长过程,希望对大家能有所启发。1、Linux 开发工程师…