11g数据库实例直观图(由内存结构和后台进程组成)
实例直观图
系统全局区 (SGA) :在实例启动时分配,是 Oracle 实例的基本组件。

程序全局区 (PGA) :在服务器后台进程启动时分配。

一个实例始终只打开一个数据库。

查询当前数据库实例名:

select instance_name from v$instance;

一,SGA(system global area,系统全局区)

SGA由数据缓冲区(data buffer cache)、共享池(shared pool)、重做日志缓冲区(redo log buffer)、大型池(Large pool)、JAVA池(java pool)、流池(stream pool)构成。

关于SGA:

select * from v$sga_dynamic_components;

a)数据缓冲区(data buffer cache)

为了减少数据库的物理I/O次数,提高性能,Oracle从磁盘数据文件检索数据之后或将数据块写入磁盘之前,都要将数据块缓存到数据缓冲区中。

Oracle数据库数据块可以使用8KB(标准块),2KB、4KB、16KB、32KB。数据缓存区也分为标准块缓存区和非标准块缓存区。

查询数据块的命令:

SQL> show parameter db_block_size

block_size

备注:保持池、循环池、默认池都属于data_buffer_cache

b)共享池(shared pool)

共享池大小有参数shared_pool_size参数指定,它又分为数据字典缓存、库缓存、服务器结果缓存。

数据字典缓存(dictionary cache):首次执行的SQL代码,服务器进程首先要解析代码,生成执行计划。在解析过程中需要检索SQL语句操作的数据库对象及其定义、用户和权限等信息。这些信息存储在数据库的数据库字典内。

库缓存(Library cache):用以缓存解析过的SQL语句的执行计划。服务器进行在执行SQL代码时,首先从库缓存查找其执行计划,如果找到,则重用该代码,这称为软解析或库缓存命中。否则进行硬解析。

服务器结果缓存:用于缓存SQL语句查询结果集合和PL/SQL函数的结果集(缓存数据块)

c)重做日志缓冲区(redo log buffer)

服务器进程把执行数据修改(insert、update、delete)过程中产生的重做日志写入重做日志缓冲区,然后日志写入进程lgwr把日志缓冲区内的重做日志写入磁盘中的联机重做日志文件。

d)大池(Large pool)

大池是一个可选的内存区域,它是由large\_pool\_size参数设置,用于分配不使用于在共享池内分配的大块内存。如RMAN备份所需要的缓冲区、语句并行执行所使用的缓冲区。

二,后台进程(background process)

(a)进程监视进程PMON(process monitor)

●监视其他后台进程、服务器进程、调度进程的运行情况。当它们异常中断时,重启这些进程或者终止实例运行。

●在用户进程异常中断后,负责清理数据库缓冲区缓存,释放用户进程锁定的资源。

●向正在运行的监听注册数据库实例。

(b)系统监视进程SPOM (system monitor)

●实例启动时,如果需要,SMON执行实例恢复。

●清理不在使用的临时段

●合并字典管理表空间内的相邻空闲区

(c)数据库写入进程DBWR ( database writer )

●负责将SGA内数据缓冲区缓存中修改过的数据块写入数据文件。

(d)日志写入进程 LGWR ( log writer )和归档进程ARCH

●负责把日志缓冲区缓存的重做日志写入重做日志文件。

●在归档模式下,在发生日志文件切换后,填满的重做日志文件被复制到其他地方保存。这些日志文件副本被称作归档日志文件。

(e) 检查点进程 CKPT ( checkpoint process )

●在Oracle数据块内,检查点进程会定期启动,它把检查点信息写入控制文件和数据文件头部,并通知DBWn进程把脏数据写入数据文件。DBWn进程的运行又会启动LGWR进程将重做日志文件缓存区中的内容写入重做日志文件。

文章来源:Oracle入门精读09_11g数据库实例的直观图

最后修改:2023 年 09 月 16 日
如果觉得我的文章对你有用,请随意赞赏