由浅入深讲解Oracle数据库进程的相关概念
Database buffer cache主要用于存储数据文件中的数据块
数据库高速缓存的数据块是高速缓存与数据文件进行信息交换的基本单位。在Oracle数据库8i以前,数据块大小只有一种,而Oracle数据库9i以后支持2K,4K,8KB,16KB及32KB五种。
用命令SQL>SHOW PARAMETER DB可以显示当前数据库的BUFFER CACHE
数据库缓存和特点如下:
<1>.根据最近最少使用LRU.
<2>. 由DB_BLOCK_SIZE来指定大小.
<3>.ORACLE使用时是以块大小为单位进行数据存取的.
还包含以下一些独立的子缓存:
<1>.DB_CACHE_SIZE.
<2>.DB_KEEP_CACHE_SIZE.
<3>.DB_RECYCLE_CACHE_SIZE.
注:可以用Alter system set db_cache_advice=on;设置成根据系统的建议来指定大小。
REDO LOG FILE主要是用于重做日志
用命令SQL>SHOW PARAMETER LOG_BUFFER。
SQL>ALTER SYSTEM SET LOG_BUFFER_SIZE=60M。
用来显示或修改重做日志缓冲区的一些信息。
命令SQL>achive log list 可以查看数据库当前的归档模式。
LARGE POOL:
与JAVA POOL一样,都是作为系统可选的内存结构,由SGA来配置。
JAVA POOL:
当安装或使用JAVA时才用到.
ORACLE内存进程包括两个,一个是SGA,一个是PGA.
(1).SGA在ORACLE实例启动时分配,是ORACLE实例的一个基本组件.
(2).PGA是在当服务器进程启动时分配的.
进程结构:
<1>.USER PROCESS.用于用户与ORACLE SERVER交互的进程.
USER PROCESS必须与ORACLE建立连接后才可使用,不可与ORACLE SERVER交互.
<2>.SERVER PROCESS.
SERVER PROCESS在用户与服务之间建立连接后,为执行用户命令的一个进程.
<3>.BACKGROUND PROCESS.
后台进程:DATABASE WRITER (DBWn)用来把DATA BUFFER CACHE中的脏数据写回到数据库中.
(注:脏数据是被改变的数据.)
在以下情况下它会写数据库:
<1>.在发生CHECKPOINT同步.
<2>.脏数据达到阀值.
<3>.DATABASE BUFFER CACHE 自由空间太少了.
<4>.TIMEOUT (3秒钟.)
<5>.RAC PING REQUEST.
<6>.TABLESPACE OFFLINE.
<7>.TABLESPACE READONLY.
<8>.TABLE DROP OR TABLE TRUNCATE (表数据清空或表结构删除).
<9>.TABLESPACE BEGIN BACKUP.
由SGA (包含DATABASE BUFFER CACHE,BACKGROUND PROCESS)-----> [ DBWn ]----> {data files,
control files, redo log file} ---->由此过程改变数据库中的数据.
LOG WRITER (LGWR) 日志写进程
在Oracle环境中
<1>.当COMMIT的时候.
<2>.当三分之一空间满时.
<3>.当日志有1MB需要重做时.
<4>.每3秒
<5>.BEFORE DBWn WRITES.(写数据前先写日志).
REDO LOG BUFFER----->LGWR--->DBWn
|--------------------------------------> REDO LOG FILES
SYSTEM MONITOR (SMON)系统监控进程
主要任务:
(1).启动过程(假定DATABASE重启时)如果需要RECOVERY,则此进程会负责打开数据库,及回滚没有
提交的事务;以及rolls forward changes in the redo logs..这些统称为:instance recovery.
(2).对每3秒就对系统自由空间的整理.(COALESCES FREE SPACE EVER 3 SEC.)
(3).清空临时段空间(DEALLOCATES TEMPORARY SEGMENTS).
这个过程也是在系统启动过程中完成的.
PROCESS MONITOR (PMON) 进程监控进程
主要用于回滚异常终止的或被用户强制终止的事务.
<1>.rolling back the transaction.
<2>.releasing locks.释放锁.
<3>.releasing other resources.
<4>.restarts dead dispatchers.重启死掉的调度器.(在共享服务器中用).
PMON (:Include in SGA)----------------------->PGA
CHECKPOINT (CKPT) 检查点进程
用来在数据库里实现同步,实现之前会强制将脏数据从内在里写到物理文件里.
<1>.会启动DBWn来写脏数据(SIGNALLING DBWn at CKPT.)
<2>.完后会更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即
CHECKPOINT的信息.
<3>.在ORACLE中,正常情况下,所有文件必须同期性地同步;靠CHECKPOINT来完成.
CKPT(作为后台进程包含在实例中)------------------DATABASE (data files,control files,redo log files.) | |______DBWn |________LGWR
Archive PROCESS (ARCn) :归档进程(可选进程),当设置归档模式后,可用来自动备份在线日志,(归档日志是重做日志的备份.)
<1>.Automatically archives online redo logs when archiverlog mode is set.
(设置归档模式后,将自动备份在线日志)
在处理SQL语句时,注意以下过程:
<1>.用以下进程连接到实例.
------------------用户进程(USER PROCESS).
------------------服务器进程(SERVER PROCESS).
<2>.Oracle服务器进程组件的使用依赖于SQL语句的种类.
[1].查询语句会返回行.
[2].DML语句会记录这种改变.
[3].COMMIT保证了事务的RECOVERY.
<3>.并不是所有的SQL语句中所有的后台进程都会参与.
结论:
Oracle Server. Oracle服务器进程包含一些文件,进程和内存,在执行一条SQL语句时,并非所有这些都会用上,有些进程用于提高数据库的性能;一些用于当发生软件或硬件异常时恢复数据库;或应用于完成其他一些维护数据库的任务.ORACLE服务器包含ORACLE实例和ORACLE数据库.
Oracle Instance: Oracle实例是用于联系后台进程和内在之间的活动,对数据库进行数据存取前必须先启动实例,每当实例启动时,SGA就被分配给它并启动了一些后台进程.后台进程执行10秒操作并监控有些进程以提供更好的性能.和可靠性.
Oracle Database: 数据库包含了系统文件,也称数据库文件,其提供了用以存储数据库信息的实际物理存储区域,用数据文件保证了数据一致性,并在当实例发生失败时恢复数据库。