Oracle体系结构


一、Oracle体系结构

数据库服务器是由实例(动态)和数据库(静态)组成。
数据库,也就是静态部分,表现为磁盘上的文件,而实例是其中动态的部分,表现为内存中的结构。

体系结构:实例中的内存缓冲区和后台进程。
数据库的物理结构:数据文件、控制文件和参数文件等。
数据库的逻辑结构:表空间、区、段、块等存储结构。

 

二、前、后台进程

SQL> shutdown immediate
SQL> startup nomount
SQL> select paddr,name from v$bgprocess where paddr<>'00';
PADDR            NAME
---------------- ----------
00007FFFD950BA58 PMON
00007FFFD950DC28 VKTM
00007FFFD950ED10 GEN0
00007FFFD950FDF8 DIAG
00007FFFD9510EE0 DBRM
00007FFFD950CB40 PSP0
00007FFFD9511FC8 DIA0
00007FFFD95130B0 MMAN
00007FFFD9514198 DBW0
00007FFFD9515280 LGWR
00007FFFD9516368 CKPT

PADDR            NAME
---------------- ----------
00007FFFD9517450 SMON
00007FFFD9518538 RECO
00007FFFD9519620 MMON
00007FFFD951A708 MMNL

已选择15行。


SQL> alter database mount;
SQL> select paddr,name from v$bgprocess where paddr<>'00';

PADDR            NAME
---------------- ----------
00007FFFD950BA58 PMON
00007FFFD950DC28 VKTM
00007FFFD950ED10 GEN0
00007FFFD950FDF8 DIAG
00007FFFD9510EE0 DBRM
00007FFFD950CB40 PSP0
00007FFFD9511FC8 DIA0
00007FFFD95130B0 MMAN
00007FFFD9514198 DBW0
00007FFFD9515280 LGWR
00007FFFD9516368 CKPT

PADDR            NAME
---------------- ----------
00007FFFD9517450 SMON
00007FFFD9518538 RECO
00007FFFD9519620 MMON
00007FFFD951A708 MMNL


SQL> alter database open;
SQL> select paddr,name from v$bgprocess where paddr<>'00';

PADDR            NAME
---------------- ----------
00007FFFD950BA58 PMON
00007FFFD950DC28 VKTM
00007FFFD950ED10 GEN0
00007FFFD950FDF8 DIAG
00007FFFD9510EE0 DBRM
00007FFFD950CB40 PSP0
00007FFFD9511FC8 DIA0
00007FFFD95130B0 MMAN
00007FFFD9514198 DBW0
00007FFFD9515280 LGWR
00007FFFD9516368 CKPT

PADDR            NAME
---------------- ----------
00007FFFD9517450 SMON
00007FFFD9518538 RECO
00007FFFD9523F30 CJQ0
00007FFFD951EAA8 QMNC
00007FFFD9519620 MMON
00007FFFD951A708 MMNL

已选择17行。

1. 后台进程DBWR

默认情况下只启动一个,如果用户事务很频繁,对于一个DBWR进程来说,要把这些脏缓冲区写入数据文件,负载是很重的。
可以启动额外的DBWR进程,提供写数据效率。DBWR进程的数据由初始化参数DB_WRITER_PROCESSES指定,最多可以启动36个,
他们名称是DBW0-DBW9以及DBWa-DBWz。

NAME            TYPE       VALUE
----------------      ---------- ------------
db_writer_processes     integer    1


DBWR进程执行写的几种情况:

1.1 固定的时间间隔,如每隔3秒
1.2 当数据库服务器发出检查点时
1.3 当脏队列中的缓冲区数目达到一定值时
1.4 当用户进程需要访问数据,服务区进程需要在数据库缓冲区缓存中搜索一定数量的空闲缓冲区,而此时空闲缓冲区的数量不能满足要求时,
    服务器进程通知DBWR进程,把脏队列中的脏缓冲区写入数据文件,这些将重新成为空闲缓冲区


2. 后台进程LGWR

LGWR进程的功能是将重做日志缓冲区中的重做日志写入重做日志文件,以保证数据库一致性。
LGWR与DBWR均是在一定条件下,将相关的缓冲区写入重做日志文件或者数据文件,两个进程不是同步工作的。

LGWR进程执行的几个条件:
2.1 固定的时间间隔,如每隔3秒
2.2 用户执行了commit操作
2.3 重做日志缓冲区的空间已经写满三分之一
2.4 DBWR将脏缓冲区写入数据文件之前

服务器进程将重做日志写入重做日志缓冲区,而LGWR进程将重做日志缓冲区中的内容写入重做日志文件。


3. 后台进程SMON
数据库启动时,检查控制文件、重做日志文件和数据文件的scn是否一致,如果不一致,然后将其中未提交的事务回滚,
并将重做日志文件中最后一个SCN写入数据文件和控制文件,以使数据库达到一致的状态。如果三种文件的SCN不一致,
实例是无法打开的,数据库启动时的这个处理过程,叫做实例恢复,由SMON进程完成。

SMON进程将重做日志文件中记录的重做日志重新执行一次,从而保证了数据不会因为系统断电丢失。

在数据库服务器正常的运行过程中,三种文件中的SCN是可以达到一致的,这要依赖于后台进程CKPT。
当CKPT进程开始工作时,SCN将被写入数据文件和控制文件,达到三种文件SCN完全一致。同时CKPT进程通知DBWR进程开始工作,
把脏缓冲区的数据写入数据文件,这时数据库将达到完全一致的状态,即使系统断电,数据库也不会受到任何影响,也不需要进行实例恢复。

只要用户提交了事务,事务对数据的修改就不会因为断电等异常丢失。反之,如果用户没有提交事务,事务对数据的修改会随着系统断电丢失,而且无法恢复。

SMON进程有如下功能:
3.1 实例恢复
3.2 回收临时表空间中的不再使用的临时段。
3.3 在字典管理表空间中合并相邻的空闲存储空间。


4. 后台进程CKPT

当数据库服务器发出检查点时,将带来大量的磁盘I/O,因此尽量减少检查点发生。

CKPT进程的几种情况发生:
4.1 正常关闭数据库服务器时
4.2 数据库服务器进行日志切换(alter system switch logfile)时
4.3 手动发出检查点(执行alter system checkpoint)时
4.4 由初始化参数指定LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL的时间到来时

#########################
alter system archive log current 与 alter system switch logfile区别:
两组命令最后的效果一样。alter system switch logfile是不等归档完成就进行switch logfile操作,速度快,尤其在非归档模式下适用,对当前实例生效。
而alter system archive log current要等待归档完成才操作,对所有实例生效。
#########################

LOG_CHECKPOINT_TIMEOUT:用于指定两个检查点之间的时间间隔,以秒为单位。oracle11g开始,默认为1800秒,即30min。如果设置为0,将取消固定时间间隔方式的检查点。
LOG_CHECKPOINT_INTERVAL:这个参数指定了一个操作系统块的数目,当服务器进程向重做日志缓冲区中写入指定块数的重做日志时,CKPT进程将发出检查点。

5. 后台进行PMON

PMON进程就是定期检查用户进程,并进行资源回收的操作。
用户进程正常退出,尚未提交的事务将被自动提交,事务对数据所加的锁将被自动释放,它所占用的资源也被自动释放。
用户进程非正常退出,PMON将对这些用户进程进行清除,释放它们所占用的资源,如锁、存储空间等,终止相应的进程,并且对那些尚未提交的事务进行回滚操作。

6. 后台进程ARCH

ARCH进程的功能是对重做日志文件进行归档。
只有数据库处于归档日志模式下,并且启动了ARCH进程,数据库服务器才会自动对重做日志进行归档。在一个实例中可以启动多个ARCH进程,默认情况下只启动4个,他们名称是ARC0~ARC3.

与ARCH进程有关的初始化参数:
    LOG_ARCHIVE_MAX_PROCESSES:指定可以启动的ARCH进程的最大数目。
    LOG_ARCHIVE_FORMAT:指定归档日志文件的名称。
    LOG_ARCHIVE_DEST_n:指定归档日志文件的存储路径,其中n为1~31中的一个数字。
    LOG_ARCHIVE_DEST_STATE_n:指定对应的归档路径是否可用。

如果数据库服务器写重做日志文件的速度比日志归档的速度快,那么将发生数据库服务器阻塞的现象,这是因为事务的重做日志无法顺利地被写入重做日志文件,从而导致事务的执行被挂起。
出现这种情况,可以考虑启动更多的ARCH进程,以加快重做日志归档的速度,或者创建更大、更多的重做日志文件,以延长文件被写满所需要的时间。
对一个数据库来说,重做日志的调整,是性能调优的一个方面。

 

你可能感兴趣的:(数据库,oracle)