2012年1月11日 星期三(oracle读书笔记,oracle体系架构之软件结构)

 

1.       Oracle数据库服务器主要由两部分组成:物理数据库和数据库管理系统。物理数据库是保存数据库的物理存储部分。数据库管理系统是用户与物理数据库之间的一个中间层,是软件层。

2.       软件结构,oracle软件结构又被称为实例结构。在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域(表现一定的结构),运行各种用途的后台进程,即创建一个例程(instance),然后再有该instance装载(mount)、打开(open)数据库,最后由这个例程来访问和控制数据库的各种物理结构。

3.       当用户连接到数据库并使用数据库时,实际上是连接到该数据库的例程,通过例程来连接、使用数据库。所以,例程是用户和数据库之间的一个中间层。例程和数据库是有很大区别的,数据库主要是指用于存储数据的物理结构,是实际存在的。但是例程是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。

4.       一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个例程。为了不使这些例程相混淆,每个例程都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。

5.       软件结构由内存结构和进程结构组成,如图:

6.       按照对内存的使用方法的不同,oracle数据库的内存可以分为SGA(System Global Area)、PGA(Program Global Area)

7.       每个例程都有并且只有一个SGA区。该SGA区可以被所有的用户进程和服务进程共享。它是不同用户进程与服务进程进行通信的中心,数据库的各种操作主要都在SGA区中进行。

8.       SGA区:数据高速缓存区保存的是最近从数据文件中读取的数据块,其中的数据可以被该例程所有用户共享。数据高速缓存区有许多大小相等的缓存块组成,缓存块分为三类:

赃缓存块:保存的是已经被修改过的缓存块。当一条SQL语句对某个缓存块中的数据进行修改后,这个缓存块就被标记为脏缓存块。它们迟早要被DBWR进程写入对应的硬盘中的数据文件,以便永久性地保留修改的结果。

空闲缓存块:空闲缓存块中没有数据,它在等待被写入数据。当oracle从数据文件中读取数据后,将会寻找空闲缓存块,以便将数据写入其中。

命中缓存块:命中缓存块保存的是最近正在被访问的缓存块。命中缓存块将始终被保留在数据高速缓存中,不会被写入数据文件。

Oracle通过两个列表来管理上述缓存块:

Dirty列表保存已经被修改但还没有被写入数据文件的脏缓存块。

LRU(Least Recently Used)列表保存所有空闲缓存块、命中缓存块,以及还没有被移入dirty列表中赃缓存块。可以将LRU列表看成是一个队列,当数据高速缓存中某个缓存块被访问后,这个缓存块就会被移动到LRU列表的头部,而其他缓存块就会向LRU列表的尾部移动。放在尾部的缓存块最先被移出LRU列表。数据告诉缓存区的工作原理如图:

亲:工作原理的文字说明不想敲了,直接上图:

9.       SGA区:重做日志高速缓存

1)       当执行insert、update、delete语句对表进行修改时,或执行create、alter、drop等语句创建方案对象的时候,oracle都会为这些操作生成重做记录。重做日志告诉缓存就是用于存储重做记录的缓存。

2)       为了加快访问的速度和工作效率,重做记录并不直接写入磁盘的重做日志文件中,而是首先被写入重做日志告诉缓存,当重做日志高速缓存中的重做记录达到一定数量后,再由LGWR(日志写)进程将其写入重做日志文件(即,oracle总是“先日志后文件”或“先内存后磁盘”)。当出现重做日志文件切换时,由ARCH(归档进程)将重做日志文件中的数据写入归档日志文件中,以作为备份,如图:

3)       重做日志高速缓存的大小有LOG_BUFFER初始化参数指定。可以在数据库运行期间修改该参数。重做日志高速缓存的大小对数据库的性能有很大影响。选择较大的值可以减少对重做日志文件的磁盘操作次数,比较适合长时间运行的、会产生大量重做记录的事务。使用show命令,可以查询重做日志缓存的大小:

Show parameter log_buffer;

通过数据字典V$SYSSTAT,可以查询用户进程等待重做日志缓存的次数

Select name,value from V$SYSSTAT WHERE name = ‘redo buffer allocation retries’;

10.   SGA区:共享池

1)       共享池保存了最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区。它主要由数据字典缓存、库缓存组成。

2)       数据字典缓存:在oracle数据库的运行过程中,oracle会频繁地对数据字典中的表、视图进行访问,以便确定操作的数据库对象是否存在、是否具有核实的权限等信息。

为了提高访问的效率,oracle在共享池的数据字典缓存中保存了最常使用的数据字典信息,如数据库用户的账户、数据库的结构信息等。

在数据字典缓存中保存的是一条一条的记录(就像是内存中的小数据库一样),而其他缓存区中保存的是数据块。

3)       库缓存:oracle DBMS在执行用户进程提交的各种SQL语句、PL/SQL程序之前,先要对其进行语法上的解析、对象上的确认、权限上的判断、操作上的优化等一系列操作,并生成执行计划。这一系列操作会占用一定的系统资源。

如果多次执行相同的SQL语句、PL/SQL程序代码,都要进行这一系列操作的话,就会浪费系统资源。库缓存的目的就是用于保存最近解析过的SQL语句和PL/SQL程序。这样,oracle在执行一条SQL语句,一段PL/SQL程序之前,首先在库缓存中进行搜索,查看他们是否已经被解析过。如果有,oracle就利用库缓存中的解析结果和执行计划来执行,而不必再重复对他们进行解析了。这样就会明显地提高执行速度。

4)       共享池的大小由SHARED_POOL_SIZE初始化参数指定。可以在数据库运行期间修改该参数。共享池小,则运行SQL语句、PL/SQL程序所占用的时间会长,而影响数据库的性能。使用show命令,可以查询重做日志缓存的大小

SHOW PARAMETER shared_pool_size;

通过数据字典V$ROWCACHE,可以查询共享池中数据字典缓存的成功与失败的次数。

SELECT SUM(GETS), SUM(getmisses) FROM V$ROWCACHE;其中gets表示读取某一类数据字典时成功的次数,getmisses表示读取某一类数据字典时失败的次数。

11.   SGA区:大池

大池用于为需要大内存的操作提供相对独立的内存空间,以便提高这些操作的性能。大池是一个可选的内存结构。DBA可以根据实际需要来决定是否在SGA区中创建大池。

12.   需要大量内存的操作包括:

数据库备份和恢复,如使用rman在磁带设备上执行备份、转储、恢复等操作。

具有大量排序操作的SQL语句。

并行化的数据库操作。

大池的大小由初始化参数large_pool_size确定。可以使用alter system语句来动态改变大池的大小。如:

Alter system set large_pool_size = 20M;

13.   PGA程序全局区:这个内存去是非共享的,只有服务进本身才能访问它自己的PGA区,而SGA区则是所有服务进程都可以共享的内存去。

14.   PGA区包括:排序区、会话区、游标区、堆栈区

15.   用户进程相关的概念有连接和会话:

连接:用户进程与数据库实例质检的路径。

会话:是用户与数据库之间的路径。当用户启动一个应用程序,输入用户名和密码登录到数据库之后(比如sql*plus)oracle就为该用户创建了一个会话。

16.   Oracle进程分为服务进程或后台进程,服务进程主要完成执行用户所提交的SQL语句。搜索SGA区的数据库缓存,决定是否读取数据文件。将查询执行后形成的数据返回给用户。

17.   用户进程、oracle进程、物理存储文件之间的关系图:

18.   DBWR进程的作用是:

管理数据高速缓存区,以便服务进程总能找到空闲缓存块

在满足一定条件时,将dirty列表中的最近未被访问的脏缓存块成批地写入数据文件

使用LRU算法将最近正在使用的缓存块继续保留在LRU列表中,以免重新读取数据文件才能获取这些缓存块中的数据。

19.   启动DBWR进程的条件:

当dirty列表中的脏缓存块达到一定数量

当服务进程在LRU列表中查找了一定数量的缓存块,但是还没有找到足够的缓存块

DBWR进程出现超时,即大约3秒未启动DBWR进程。

当出现检查点,LGWR进程通知DBWR进行写操作。

20.   启动LGWR进程的条件是:

用户通过commit语句提交当前事务

重做日志高速缓存被写满三分之一

DBWR进程需要为检查点清除脏缓存块,即将脏缓存块写入数据文件。

LGWR进程出现超时,即大约3秒未启动LGWR进程。

注意:在DBWR将脏缓存块写入数据库之前,LGWR进程必须先将对应的重做记录写入重做日志文件

21.   执行CKPT进程的作用:

更新控制文件与数据文件,使其同步

触发DBWR进程,使其将脏缓存块写入数据文件

LOG_CHECKPOINT_TIMEOUT 指定检查点执行时的最大时间间隔

LOG_CHECKPOINT_INTERVAL指定在出现检查点之前,必须写入重做日志文件中的操作系统块的数量。

LOG_CHECKPOINT_TO_ALERT设置是否将检查点信息记录到极高日志文件中。目的是DBA可以确定检查点是否按所需频率出现。

22.   SMON系统监视进程的作用:

在例程启动时负责对数据库进行恢复

清理不再使用的临时段

将各个表空间的空闲空间碎片合并在一起,使之更容易分配。

23.   PMON进程监视进程的作用:

恢复中断或失败的用户进程、服务进程

清楚非正常中断的进程留下的孤儿会话。

回退未提交事务

释放进程所占用的资源

监视服务进程和调度进程,如果他们失败,则自动重新启动他们。

24.   归档进程ARCH负责在重做日志文件切换后将已经写满的中做日志文件复制到归档日志文件中,以防止循环写入重做日志文件时将其覆盖。要启动ARCH进程,需要将初始化参数设置为true。Arch进程启动后,数据库将具有自动归档功能。如果ARCH进程没有启动,当重做日志文件被写满之后,数据库将被挂起,等带DBA进行手工归档。

25.   注意:因为重做日志文件是被循环使用的,所以,如果LGWR进程要使用的下一个重做日志文件正在被归档,则数据库将会被挂起,知道该重做日志文件归档完毕为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值