PMON进程
简介
-
1,在进程非正常中断后,做清理工作。例如:dedicated server失败了或者因为一些原因被杀死,这是PMON的工作分两种。第一,是对dedicated server所做的工作进行恢复或撤销。第二:是释放dedicated server占用的资源。PMON会把失败进程的未提交的工作进行rollback,释放锁,释放SGA空间
-
2,在进程abort后,PMON进行清理工作。PMON会监视oracle其他的后台进程,并在需要的时候对它们进行重建。如果shared server或者dispatcher失败后,PMON会介入其中,并在清理完失败进程后,重建一个shared server或dispatcher。例如:在数据库进行写日志的时候LGWR进程失败,这是个很严重的错误。解决这种问题最安全的方法是立即中断实例,并恢复。
-
3,PMON的第三个用途是,向Oracle TNS listener注册实例信息。在实例启动的时候,PMON会查询oracle的默认端口(1521端口)是否处于工作状态。如果这个端口已经处于工作状态,那么该实例就可以启动,PMON把实例的相关信息告诉listener,包括服务名、实例的信息等。如果listener没有启动,PMON就会定期的尝试去连接listener。这里要注意如果oracle没有是默认的1521端口,而是使用其他的端口时,PMON和listener的连接过程和使用1521端口还是很相似的,除了,在使用非默认端口时,listener的地址要在参数LOCAL_LISTENER中指定。
– 《oracle 编程艺术 9i,10g,11g》
周期性唤醒
- PMON 唤醒周期参数:_pkt_pmon_interval = 50cs(cs即 centisecond ,表示百分之一秒,1秒=100厘秒)
- _dead_process_scan_interval
pmon进程会被唤醒,来清理dead process,并释放dead process持有的资源(latch and lock)。
pmon通过轮询方式去检测dead process,轮询间隔为_dead_process_scan_interval(默认是60秒)。 - _cleanup_rollback_entries
参数默认是100,超过则post通知smon,剩下由smon来完成剩余的回滚工作。生产可以考虑设置大一些将数据库服务注册到监听,轮询每60秒(12c后这项工作由LRRG进程负责)
col VALUE for a20
col NAME for a30
col DESCRIPTION for a80
select a.ksppinm name, b.ksppstvl value,a.ksppdesc description from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm in ('_pkt_pmon_interval','_dead_process_scan_interval','_cleanup_rollback_entries');
NAME VALUE DESCRIPTION
------------------------------ -------------------- ---------------------------
_pkt_pmon_interval 50 PMON process clean-up interval (cs)
_dead_process_scan_interval 60 PMON dead process scan interval (in seconds)
_cleanup_rollback_entries 100 no. of undo entries to apply per transaction cleanup
手动唤醒PMON
- oradebug wakeup orapid
orapid:Oracle进程的PID,不是系统(OS)的PID,PMON进程的orapid一般为2,用以下SQL查询:orapid
SQL> select pid,program from v$process where program like '%PMON%';
PID SPID PROGRAM
---------- ------------------------ ------------------------------------------------
2 2663 oracle@bjgs005sin64.hnapay.com (PMON)
- 开始唤醒
SQL>connect /as sysdba SQL> oradebug setmypid Statement processed. SQL> oradebug wakeup 2; Statement processed.
通过100246事件跟踪PMON的清理死进程测试
100246事件跟踪命令
SQL>connect /as sysdba
-- 设置追踪文件
SQL> alter session set tracefile_identifier='pmon_10246';
-- 开启追踪
SQL>alter system set events '10246 trace name context forever,level 4';
-- 关闭追踪
SQL>alter system set events='10246 trace name context off';
测试杀死进程验证-示例
- 测试逻辑
启动三个Session A、B、C。A操作Insert ,B在A操作Insert的时候进行KILL掉A的会话,将A会话变成死进程,C进行监测试会话连接。最后查看TRC文件,解决PMON清理过程。 - 启动三个session
KILL Session SID : 3
测试 Session SID : 256
追踪 Session SID : 245

- 过程

- 查看trc文件

- 回滚dead transaction,由_cleanup_rollback_entries 参数控制

- 验证trc文件中:ksuprog 个数
[oracle@dbrac1 trace]$ cat twodb_pmon_2663.trc | grep ksuprog | wc -l
100
总结
- 理论仅仅是知道,实践才是掌握;
- ‘_pkt_pmon_interval’,’_dead_process_scan_interval’,’_cleanup_rollback_entries’ 三个参数对pmon的影响已清晰;
文章推荐
- 故障处理
《Oracle HASH JOIN 引起的TEMP爆满分析总结》
《expdp/impdp 任务终止不能靠Ctrl+C》
《Oracle_索引重建—优化索引碎片》
《Oracle 自动收集统计信息机制》
《DBA_TAB_MODIFICATIONS表的刷新策略测试》
《FY_Recover_Data.dbf》
《Oracle RAC 集群迁移文件操作.pdf》
《Oracle Date 字段索引使用测试.dbf》
《Oracle 诊断案例 :因应用死循环导致的CPU过高》
《记录一起索引rebuild与收集统计信息的事故》
《RAC DG删除备库redo时报ORA-01623》
《问答榜上引发的Oracle并行的探究(一)》
《问答榜上引发的Oracle并行的探究(二)》
《DG 同步延迟之奇怪的经典报错:ORA-16191》 - 等待事件
《log file sync》 等待事件问题分析汇总
《ASH报告发现:os thread startup 等待事件分析》 - 监控&脚本
《DG standby time 监控脚本部署》
《Oracle 慢SQL监控脚本》
《Oracle 慢SQL监控测试及监控脚本.pdf》
《oracle 监控表空间脚本 每月10号0点至06点不报警》
《Oracle 脚本实现简单的审计功能》 - 安装系列
《ORACLE_19C_linux安装.pdf》
《Oracle 19c-手工建库.pdf》
《19c单库升级19.11补丁.pdf》
《19c_rac补丁《19.11-p32841500》.pdf 》
《oracle_图形-单实例11.2.0.4升级19.3.pdf》
《oracle_11.2.0.3升级11.2.0.4–单实例升级.pdf》
《oracle_静默-单实例 11.2.0.4升级19.3.pdf》
《CentOS_6.7系统一步一步 RAC 11.2.0.4升级19.3.pdf》
《整理后_RAC_11.2.0.4升级19c.pdf》
欢迎赞赏支持或留言指正

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




