Instance:
=================================================================================
Instance分为两部分:
--------------------------
1.SGA
--------------------------------
1.Share Pool
------------------------
1.Library Cache
-----------------------
2.Data Dictionary Cache
-----------------------
2.Database Buffer Cache
------------------------
3.Redo Log Buffer
------------------------
4.Java Pool
------------------------
5.Large Pool
------------------------
2.后台进程
--------------------------------
1.PMON
------------------------
2.SMON
------------------------
3.DBWR
------------------------
4.LGWR
------------------------
5.CKPT
------------------------
6.ARCH(可选)
------------------------
-------------------------------------------------------------------------------------------------------------------------------
实例(Instance):是指内存部分的结构,当数据库启动时,Oracle占用一定的空间,实例就是指此时
的内存结构和后台进程,当数据库服务器关闭,实例也就不存在了。
--------------------------------------------------------------------------------------------------------------
数据库(Database):是由一些物理文件和与之对应的逻辑结构(表空间,段等)组成。这些文件包括
数据文件,控制文件,重做日志和非必须的一般文件,如参数文件(parameter file)
口令文件(password file)及归档日志文件等。
------------------------------------------------------------------------------------------------------------------
一般情况下,一个数据库对应一个实例。一个实例最多只能安装打开在一个数据库上。
负责数据库的相应操作并与用户交互。只有实例启动,用户才能访问数据库,也就
是说,用户只能通过实例访问数据库。
------------------------------------------------------------------------------------------------------------------
独立于SGA之外的内存区域:
-------------------------------------
PGA
------------------------------------
PGA是独立于SGA之外的内存区域。SGA是共享全局区。PGA是私有的内存区域。
每当有用户连接数据库时,数据库都会分配独立的内存区域给当前的用户进程,
这个用户进程中的代码,全局变量和数据结构等都会放在PGA内,直到用户退
出连接,内存被释放。每个用户进程独享一份PGA内存区域,其中包含本进程
相关的特性信息,所以也不使用SGA中的锁定机制来保护共享数据。
另外,PGA还保存所运行的操作系统的进程状态信息。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SGA
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
共享池(Share Pool):
-------------------------------
1.Library Cache
------------------------------
2.Data Dictionary Cache
------------------------------
共享池是SGA的保留区。用来存放最近执行过的SQL语句和数据字典信息。大小由Share_pool_size指定,包括库缓存和数据字典缓存区。
-----------------------------------------------------------------------------------------------------------------------
库缓存区(Library Cahce):
--------------------------------
用于存放最近执行的SQL或PL/SQL语句信息,包括语句的文本,解析后的代码和执行计划。
-----------------------------------------------------------------------------------------------------------------------
***共享游标:存放解析SQL语句后生成的执行计划,对应的内存区域叫做共享游标。
---------------------------------------------------------------------------------------------------------------
因为内存区域有限,只能存放一定量的共享游标,Oracle服务器采用LRU(Lease Recently Used),也叫做FIFO算法释放共享游标,以保存最新执行的SQL语句。
另外,根据存放语句类型分为共享SQL区和共享PL/SQL区。
-----------------------------------------------------------------------------------------------------------------
保存在共享池中的SQL语句可以从V$SQLTEXT,V$SQLAREA中查询。
-------------------------------------------------------------------------------------------------------------------
数据字典缓存区(Data Dictionary Cache):
--------------------------------------------------
存放自身运行所需要的全部数据字典信息,包括表和列的定义,登录的用户名,用户方案
对象,权限信息等。
-----------------------------------------------------------------------------------------------------------------------
数据高速缓存区(Data Buffer Area):
--------------------------------------------
用来存放数据库最近使用的的数据块。在Oracle数据库中,任何用户端的会话都不会直接操作磁盘文件的数据,无论是读写,更新都是将数据加载到数据高速缓存区中,然后在缓存区完成数据的读写。
-----------------------------------------------------------------------------------------------------------------------------
数据高速缓存区的结构:
-------------------------------
1.脏缓存区(Dirty Buffers):
存放缓存中与磁盘文件中不一致的数据,存放该数据的块叫脏块,脏块所在的缓存区叫做脏缓存区。
----------------------------------------------------------------------------------------------------------------------
2.空闲缓存区(Free Buffers):
不包含数据的缓存区
-----------------------------------------------------------------------------------------------------------------------
3.忙缓存区|保留区|命中缓存区(Pinned Buffers):
服务器进程正在访问的缓冲区或明确保留以备使用的区。
-----------------------------------------------------------------------------------------------------------------------
同样的,Oracle服务器采用LRU算法,使用DIRTY列表和LRU列表来管理。
-----------------------------------------------------------------------------------------------------------------------------
重做日志缓存区(Redo Log Buffer):
--------------------------------------------
用来保存执行DDL或DML语句时产生的日志信息。缓存区由一条条的缓存记录(Redo Entries)组成,每条重做记录记载SQL语句所操作的数据块位置,以及操作前后的数据块内容。
----------------------------------------------------------------------------------------------------------------------------
当执行DDL或DML时,首先将所做的操作记录到重做日志缓存区,然后才修改数据高速缓存区中数据块的内容。
----------------------------------------------------------------------------------------------------------------------------
重做日志缓存区的信息在检查点(Checkpoint)发生或缓存区中的内容达到一定数量后,由后台进程(LGWR)负责将缓存区中的内容写入到重做日志文件中,同时释放这些缓存空间。
----------------------------------------------------------------------------------------------------------------------------
大小由初始化参数LOG_BUFFER定义,和共享池,数据高速缓存区不同,大小不能动态修改。
----------------------------------------------------------------------------------------------------------------------------
大缓存区(Large Pool)(可选):
---------------------------------------
目的就是提供一个大的内存空间供大的操作作用。
----------------------------------------------------------------
大小由LARGE_POOL_SIZE定义。
-----------------------------------------------------------------
JAVA池(Java pool)(可选且可为0):
---------------------------------------
提供Java程序运行所需的内存空间。
--------------------------------------------
大小由JAVA_POOL_SIZE定义。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Oracle后台进程
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
数据库中的进程:
---------------------
1.用户进程(user process)
-----------------------------------------
2.服务器进程(Server preocess)
-----------------------------------------
3.后台进程(DBWR,LGWR,SMON,PMON,CKPT,ARCH)
-----------------------------------------
用户发起进程----->服务器响应用户发起的进程,创建会话
---------------------------------------------------------------------------
两个必须想明白的概念:
---------------------
1.检查点(Checkpoint):
----------------------
检查点的作用有两个:
---------------------------
1.保证数据缓存中的脏数据块写入到操作系统的数据文件中,保持数据的一致性。
---------------------------------------------------------------------------------------------------------
2.缩短实例启动后恢复的时间。(检查点的发生可以尽量减小脏块的数量,从而减
小实例恢复的时间,从这个角度讲,可以将Checkpoint理解为文件的自动保存)
----------------------------------------------------------------------------------------------------------
2.SCN
------------------------
SCN是一个递增的数字,用来标识数据库的每一次改动及先后顺序。这个数字是由
Timestamp转换过来的,当需要产生一个最新的SCN时,系统获取当时的Timestamp
将其转换为数字作为SCN。
--------------------------------------------------------------------------------------------------------------
Checkpoint 和 SCN 的关系:
-------------------------
在Oracle中,SCN相当于时钟,用来记录整个Oracle系统的更改顺序。而Oracle中的
Checkpoint是在一个特定的"时间点"发生的,衡量这个"时间点"用的就是SCN。因此
当一个Checkpoint发生时,SCN会被写入文件头以记录这个Checkpoint。
----------------------------------------------------------------------------------------------------------------
Checkpoint是一个数据库事件(Event),Checkpoint事件由CKPT/LGWR发出,当Checkpoint事件发生时,DBWn会将脏数据块写入到操作系统的数据文件中,同时,数据文件和控制文件的文件头也会被更新为当前的SCN以记录Checkpoint信息。
----------------------------------------------------------------------------------------------------------------
1.数据库写进程(DBWR):
-------------------------------------
进程负责将数据高速缓存区中的脏数据块写入到数据文件中。默认只有一个DBWR进程,如果DBWR写出的速度不够快,也就是缓存释放的速度不够快,可能引起明显的时间延迟,这时可以通过设置初始参数,db_writer_process定义多个DBWR进程,最多20个,分别为DBW1,DBW2………DBWn.
-----------------------------------------------------------------------------------------------------------------------
DBWR进程启动写入动作的时机如下:
------------------------------------------------
1.系统发出检查点事件
--------------------------------------------
2.脏块数量达到界限值
--------------------------------------------
3.服务器进程在高速缓存区中找不到空闲的数据块
-------------------------------------------------------------------
4.3S超时
--------------------------------------------
5.删除(Drop)或截断(Truncate)表
--------------------------------------------
6.表空间脱机(Offline)只读(Read only)或开始备份(Begin Back)
--------------------------------------------------------------------------------------------------------------------
2.日志写进程(LGWR):
-------------------------------------
1.与DBWR类似,都是将缓存中的内容写入到磁盘文件中。
---------------------------------------------------------------------------------------------------------------------
2.不同的是,LGWR是顺序写,DBWR是大量的分散写,所以LGWR的写入速度要快于DBWR。
----------------------------------------------------------------------------------------------------------------------
***注意:每次日志缓冲区被写到磁盘的时候,缓冲区的内容同时混杂有已经结束的事务和未结束事务。
----------------------------------------------------------------------------------------------------------------------
3.Oracle的快速提交机制便是,只要日志写完了便返回成功信息给用户(因为可以应用日志恢复)
----------------------------------------------------------------------------------------------------------------------
LGWR启动写入动作的时机如下:
-------------------------------------------
1.用户事务提交(Commit)
---------------------------------------
2.当重做日志缓存区已有1/3被填满。
---------------------------------------
3.重做日志缓存区中的数据超过1M
---------------------------------------
4.每隔3s
---------------------------------------
5.在DBWR进程启动将脏数据块写入数据文件之前。
------------------------------------------------------------------------
**根据LGWR的启动时机,分配大的重做日志缓存区并不实际,Oracle根本不会完全使用这个缓存区。
-----------------------------------------------------------------------------------------------------------------------
3.检查点进程(CKPT)
--------------------------
目的:就是确保数据文件,控制文件,重做日志文件的同步
------------------------------------------------------------------------------
CKPT启动的时机如下:
--------------------------
1.日志切换时
-----------------------------------------------------------------
2.使用Normal,Immediate,Transaction关闭实例时
-----------------------------------------------------------------
3.用户主动触发
------------------------------------------------------------------
4.系统监视进程(SMON):
---------------------------------------
SMON进程依据SCN号,把只写入日志文件尚未写入数据文件的数据依据日志内容恢复事务数据,并把未提交的事务数据撤消,另外还负责清理临时空间和合并空闲空间。
-----------------------------------------------------------------------------------------------------------------------
5.用户监视进程(PMON):
---------------------------------------
用于监视用户进程,一旦有进程失败,则清除该进程,释放所占用的系统资源,另外,PMON还周期性检查其它后台进程的状态,
----------------------------------------------------------------------------------------------------------------------
*SMON进程关注"系统级"的任务,PMON进程关注的是"单个进程"
----------------------------------------------------------------------------------------------------------------------
6.归档日志进程(ARCH):
---------------------------------------
ARCH进程负责,一旦日志文件写满了需要切换时,将重做日志复制到归档日志中,达到备份日志文件目的。
================================================
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25963200/viewspace-700403/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25963200/viewspace-700403/