三、Oracle数据体系架构之:进程结构
分为:DBWN 写进程
lgwr 日志写进程
okpt 检查点进程
smon 系统监控进程
pmon 进程监控
1. DBWN 写进程
ora_dbw_orcl 写进程,默认只有一个
将脏数据写盘
参数:SQL> show parameter writer
原则:写进程的个数一般不超过cpu的核数
什么情况下会触发这个进程
1) check pointer:有检查点,
2) 脏数据达到阀值:达到buffer内存的10%即要将脏数据写到磁盘;
这就是造成为什么没有提交的脏数据会写到磁盘;
并且这样也不会影响读数据,因为在修改一个数据块时,在buffer cache
中会生成一个与原始数据一致的镜像数据,以供其他会话访问,和做
rollback时使用!
3) 扫描整个database buffer cache没有空闲:
这种情况是:虽然脏数据没有占到Buffer的10%,但是数据的缓存占了
太多Buffer空间,所以需要释放空间,会优先读取lruw(脏数据链表),
再读取LRU,做超0释放,释放数据缓存空间;
4) time off:每三秒调度一次数据写;
5) 在集群环境中的ping请求:
将所有结点的脏数据写磁盘,使数据状态一致,协同工作的
6) 删除表、截断表:drop table、trucat table;
7) tablespace read only:
表空间只读触发
8) tablespace offline:
表空间脱机触发数据写;
9) begin backup:
热备份命令触发数据写;
2、LGWR 日志系写进程
ora_lgwr_orcl 写日志进程(以日志组为单位,每组中两个成员)
SQL> DESC v$log
LGWR功能
日志写进程(日志写比数据写更重要),因为内存中的数据一断电就消
失,要做数据的回滚、前滚只能依靠日志文件。log buffer 只是缓冲日志写
触发机制
1) 提交命令:commit;
2) log buffer 达到内存的1/3,即达到阀值;
3) time of:3秒一次;
4) 任何一次数据写之前都必须做lgwr;
***最大保护机制,即0数据丢失。是指重库的日志先写,主库的数据才
能写入,保证在主库断电时,所有的记录都在重库中有记载,重库的日志
记录只会比主库多,这个在datagard中有应用;
3、OKPT
ora_okpt_orcl 检查点进程
(1)完全检查电点(每天的几点几点)
正常关机
切换日志组
(2)增量检查点
*每隔三秒
*当日志达到了三分之一的时候
4、SMON 系统监视进程
ora_smon_orcl 是系统的监视进程(system monitor)
功能
a) 系统监控管理,定期合并空闲,回收临时段;
b) 做实例的恢复:前滚、回滚、释放资源
smon什么时候做恢复?
数据修改随时发生,但是数据同步定期做;所以会产生脏块(灰块),即
内存数据与磁盘数据不一致,所以会存在以下两种情况:
a) 没提交的已写盘的数据(需要进行回滚);
---什么时候会发生这种数据?
b) 已提交没有写盘的数据(进行前滚);
***commit只是将日志log 写盘,与脏数据是否写盘无关!!
是Oracle最核心的进程
关闭Oracle最快的方式是什么 kill -9 32456
5、PMON 进程监控
ora_pmon_orcl 是Process Monitor 当系统出现错误的时候,负责清理现场
a) 监控其他非核心后台进程,如果其他非核心后台进程意外终止,则由
它重启;
b) 清洁意外终止的死链接在后天残留的垃圾:将其修改的数据回退,释
放锁;
pmon会不断给每个连接发包;
c) 在网络环境中,pmon动态注册实例的信息到监听程序;
d) 在集群环境有关:在集群环境中,每60秒收集一次本节点的CPU压
力, 以这些数据做负载均衡;
在后天残留的垃圾:将其修改的数据回退,释
放锁;
pmon会不断给每个连接发包;
c) 在网络环境中,pmon动态注册实例的信息到监听程序;
d) 在集群环境有关:在集群环境中,每60秒收集一次本节点的CPU压
力, 以这些数据做负载均衡;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030174933903.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2NDAwMTk1,size_16,color_FFFFFF,t_70#pic_center)