名词术语
1.Cross Boundary Hang

  交叉边界hang。在12.1.0.1中,hang manager可以检测database和asm之间的hang。
2.Deadlock or Closed Chain

  死锁或关闭链条。打破死锁链条的唯一方法是让其中某些会话完成其工作或被终止。
3.Hang or Open Chain

  hang或开放链条。从hang manager角度讲,hang就是一些会话无法进一步处理工作,这不是死锁或循环链条。hang or open chain有一个根本阻塞者,阻塞了这个链条中的其他所有会话,也包含一个被其它会话阻塞的最终等待者。
4.Immediate Waiter

  在open chain中,该会话被产生hang的根本会话所阻塞。
5.Quality of Service (QoS) Management

  QoS(服务质量管理)是数据库中自动的、基于策略的监控整个系统的负载请求的服务。管理应用需要的资源、调整系统配置,保障应用的性能。
6.Self-Resolved Hang

  自处理的hang。被hang manager检测到的已经不再存在的hang或死锁。

 Hang Manager

在诊断数据库问题的时候,经常会遇到数据库/进程hang住的问题。对于hang的问题,一般来说,常见的原因有以下两种:
1.死锁(cycle)。对于这种hang, 除非循环被打破,问题会永远存在。
2.某个堵塞者(blocker)进程在持有了某些资源后堵塞了其他进程,其它进程无法获取资源。
  可以把blocker分为直接堵塞进程(immediate blocker)和根堵塞进程(root blocker)。而root blocker在通常情况下会处于两种状态。
  (1)根堵塞进程处于空闲状态,对于这种情况,终止这个进程能够解决问题。
  (2)根堵塞进程正在等待某些和数据库无关的资源(例如:等待I/O),对于这种情况,终止这个进程也许能解决问题。但是,从数据库的角度来讲,这已经超出了数据库的范畴。

Hang Manager是从10.2.0.1被引进的。主要用途是检测和处理hang问题。随着版本的增加,功能也不断的被完善加强。但是,实际上从11.2.0.2开始,Hang Manager才实际开始解决hang问题,通过终止产生hang的根本会话或进程来实现。

Hang Manager只在RAC数据库中生效。

默认情况下,hang manager不会终止一个实例或者将实例从集群环境中剔除;也不会自动解决其检测到的hang问题。目前也不能解决ASM hang问题。

从12.1.0.1开始,如果rac集群中的QoS处于active状态,hang manager会使用QoS提供的附加信息来决定是否应该忽略或者解决一个hang问题。 如果QoS倾向于hang manager解决hang问题,hang manager会比平时使用更少的时间来检测和处理hang问题,而不是延迟处理。

在12.1.0.1之前,hang只会在数据库内部或者asm中被检测。从12.1.0.1开始,hang manager会检测数据库和asm之间产生的hang。

当hang manager 解决hang问题时,会在alert日志中给出一个ora-32701事件:

ORA-32701: Possible hangs up to hang ID=24 detected
Incident details in: /ee/oracle/oracle_base/diag/rdbms/orcl/orcl1/incident/incdir_1944098/orcl1_dia0_34930694_i1944098.trc
DIA0 terminating blocker (ospid: 28311778 sid: 3398 ser#: 1) of hang with ID = 24
requested by master DIA0 process on instance 2
Hang Resolution Reason: Automatic hang resolution was performed to free a
critical database process.
by terminating session sid:3398 with serial # 1 (ospid:28311778)

hang manager的基本步骤

1.检测阶段(DETECT)

  数据库会分配一部分内存空间用于存放hanganalyze dump信息。这部分内存空间在每个节点的数据库实例上都存在。 该阶段扫描实例的所有本地会话,检测是否有可能hang的会话。 每次扫描被称作一个snap。默认保存3个snap,每个snap间隔32秒,时间间隔由隐含参数"_hang_detection_interval"决定。 一旦检测到一个或多个会话出现在3个snap中(这些会话就被认为可能是hang的会话),就会向master DIA0进程发起REQHM请求,进入HA阶段;如果没有,检测到hang的会话,HM继续保留在该阶段,除了阶段性的进入HAONLY阶段。

2.HA阶段(Hang Analysis)

  检测到hang的会话后,发起REQHM请求的DIA0进程将所有检测到的会话信息发送给master DIA0进程。 全局的hang analysis被启动,创建wait for graphs(WFGs),这个过程可能会跨节点,找出本地或远程的blocker。本阶段完成后进入下一阶段,分析阶段。

  负责搜集这些dump信息的后台进程是DIA0(这个进程从11g才被引入)。默认情况下每3秒钟搜集本地级别hanganalyze dump, 每10秒搜集全局级别hanganalyze dump 每个实例都会拥有自己的DIA0进程,负责完成本地的hang分析。但是,对于RAC数据库,很多hang的情况会包含多个实例的进程。所以需要一个实例上的DIA0进程作为master,来对多个实例搜集到的信息进行分析。对于11g版本,节点号最小的实例的DIA0进程会成为HM的master进程。当然,在实例级别发生了重新配置后,主(master)DIA0 进程会重新在存在的实例中重新被选举出来

3.分析阶段(ANALYZE)

  将root waiter和immediate waiter会话信息和Hang Signature Cache(HSC)进行匹配。如果找到匹配的记录,则更新最新的时间和计数;如果没有匹配的,创建一个新的hang记录。完成该阶段后,HM回到检测阶段。 确认阶段是由其它单独参数控制的。

4.确认阶段(verify)

  被怀疑会话所在的节点会检查这些会话是否还在hang状态,并将信息发送给master DIA0进程。如果这些会话还在,确认该会话是hang的。然后进入victim阶段。

5.处理阶段(victim)

  如果隐含参数"_HANG_RESOLUTION_SCOPE"值为process,HM会终止会话,如果会话终止失败,就会终止进程;

  如果隐含参数"_HANG_RESOLUTION_SCOPE"值为instance,并且victim是关键的后台进程,该实例会被kill掉。

  

  整体步骤:  

  

  具体步骤:

  

hang manager信息查看:

SQL> select * from v$hang_info;
SQL> select * from v$hang_session_info;
SQL> select * from gv$hang_statistics; INST_ID STATISTIC# NAME VALUE
---------- ---------- --------------------------------------------- ----------
1 0 number of deadlocks detected and ignored 0
1 1 number of hangs detected 0
1 2 number of local hangs 0
1 3 number of global hangs 0
1 4 number of transient hangs 0
1 5 hangs ignored due to high CPU on root's node 0
1 6 hangs ignored due to high IO on root's node 0
1 7 hangs ignored due to application contention 0
1 8 hangs ignored due to long running operations 0
1 9 hangs monitored due to archiving issues 0
1 10 hangs ignored due to archiving issues 0
1 11 hangs ignored, blocked by remote database 0
1 12 hangs ignored due to SQL parsing 0
1 13 hangs ignored due to dumping system state 0
1 14 hangs ignored, instance termination required 0
1 15 hangs ignored, only one active instance 0
1 16 number of explicitly resolved hangs 0
1 17 number of self-resolved hangs 0
1 18 total self-resolved hang time in seconds 0
1 19 minimum self-resolved hang time in seconds 0
1 20 maximum self-resolved hang time in seconds 0
1 21 number of HSC matched hangs 0
1 22 hangs resolved due to instance termination 0
2 0 number of deadlocks detected and ignored 0
2 1 number of hangs detected 0
2 2 number of local hangs 0
2 3 number of global hangs 0
2 4 number of transient hangs 0
2 5 hangs ignored due to high CPU on root's node 0
2 6 hangs ignored due to high IO on root's node 0
2 7 hangs ignored due to application contention 0
2 8 hangs ignored due to long running operations 0
2 9 hangs monitored due to archiving issues 0
2 10 hangs ignored due to archiving issues 0
2 11 hangs ignored, blocked by remote database 0
2 12 hangs ignored due to SQL parsing 0
2 13 hangs ignored due to dumping system state 0
2 14 hangs ignored, instance termination required 0
2 15 hangs ignored, only one active instance 0
2 16 number of explicitly resolved hangs 0
2 17 number of self-resolved hangs 0
2 18 total self-resolved hang time in seconds 0
2 19 minimum self-resolved hang time in seconds 0
2 20 maximum self-resolved hang time in seconds 0
2 21 number of HSC matched hangs 0
2 22 hangs resolved due to instance termination 0 46 rows selected. SQL>

相关参数:

NAME                                               VALUE                          ISDEFAULT ISMOD      ISADJ
-------------------------------------------------- ------------------------------ --------- ---------- -----
_hang_analysis_num_call_stacks 3 TRUE FALSE FALSE
_hang_base_file_count 5 TRUE FALSE FALSE
_hang_base_file_space_limit 10000000 TRUE FALSE FALSE
_hang_bool_spare1 TRUE TRUE FALSE FALSE
_hang_delay_resolution_for_libcache TRUE TRUE FALSE FALSE
_hang_detection_enabled TRUE TRUE FALSE FALSE
_hang_detection_interval 32 TRUE FALSE FALSE
_hang_hang_analyze_output_hang_chains TRUE TRUE FALSE FALSE
_hang_hiload_promoted_ignored_hang_count 2 TRUE FALSE FALSE
_hang_hiprior_session_attribute_list TRUE FALSE FALSE
_hang_ignored_hang_count 1 TRUE FALSE FALSE
_hang_ignored_hangs_interval 300 TRUE FALSE FALSE
_hang_int_spare2 FALSE TRUE FALSE FALSE
_hang_log_verified_hangs_to_alert FALSE TRUE FALSE FALSE
_hang_long_wait_time_threshold 0 TRUE FALSE FALSE
_hang_lws_file_count 5 TRUE FALSE FALSE
_hang_lws_file_space_limit 10000000 TRUE FALSE FALSE
_hang_monitor_archiving_related_hang_interval 300 TRUE FALSE FALSE
_hang_msg_checksum_enabled TRUE TRUE FALSE FALSE
_hang_resolution_allow_archiving_issue_termination TRUE TRUE FALSE FALSE
_hang_resolution_confidence_promotion FALSE TRUE FALSE FALSE
_hang_resolution_global_hang_confidence_promotion FALSE TRUE FALSE FALSE
_hang_resolution_policy HIGH TRUE FALSE FALSE
_hang_resolution_promote_process_termination FALSE TRUE FALSE FALSE
_hang_resolution_scope PROCESS TRUE FALSE FALSE
_hang_short_stacks_output_enabled TRUE TRUE FALSE FALSE
_hang_signature_list_match_output_frequency 10 TRUE FALSE FALSE
_hang_statistics_collection_interval 15 TRUE FALSE FALSE
_hang_statistics_collection_ma_alpha 30 TRUE FALSE FALSE
_hang_statistics_high_io_percentage_threshold 15 TRUE FALSE FALSE
_hang_verification_interval 46 TRUE FALSE FALSE 31 rows selected. SQL>

Oracle Hang Manager的更多相关文章

  1. Oracle 11g 新特性 – HM(Hang Manager)简介

    在这篇文章中我们会对oracle 11g 新特性—hang 管理器(Hang Manager) 进行介绍.我们需要说明,HM 只在RAC 数据库中存在. 在我们诊断数据库问题的时候,经常会遇到一些数据 ...

  2. oracle Net Manager 服务命名无法配置(无法新建、添加服务名)

    今天在配置oracle Net Manager 配置服务命名的时候总是无法配置,以前配置的服务名都显示不出来,然后点击绿色添加按钮也没反应,因为先前我修改了oracle\product\10.2.0\ ...

  3. Oracle Enterprise Manager打不开的解决方法

    之前OEM一直可以打开,但今天上班发现打不开了,输入http://localhost:1158/em 提示该网页无法打开. 那么检查一下: cmd进命令行 C:\Documents and Setti ...

  4. Oracle DB 通过 Oracle Enterprise Manager注册要使用的恢复目录

    通过 Oracle Enterprise Manager  注册要使用的恢复目录.  a)  在 EM 中,导航到“Availability > Recovery Catalog Setting ...

  5. 【Oracle连接字符串】【Oracle Net Manager 服务命名配置】【PL/SQL 登陆数据库】

    连接数据库的几个重要参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4. 数据库名(db ...

  6. How to Install/Deinstall Oracle Workspace Manager (文档 ID 263428.1)

    In this Document   Goal   Solution   References APPLIES TO: Workspace Manager - Version 9.0.1.0 to 1 ...

  7. Oracle Enterprise Manager Cloud Control 12c R4 安装配置

    准备软件 em12.1.0.4_linux64_V45344-01.zip em12.1.0.4_linux64_V45345-01.zip em12.1.0.4_linux64_V45346-01. ...

  8. Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库

    我们知道,要连接一个数据库需要知道四个参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4 ...

  9. oracle net manager 数据传输安全

    oracle net manager来加密客户端与数据库之间或中间件与 数据库之间的网络传输数据 第一步:开始-->所有程序 -->oracle --> 配置和移植工具 --> ...

随机推荐

  1. 获取在attr.xml中声明的主题样式

    在换肤时,先在attr.xml中定义Resource的属性名,再到stytle中,根据不同的主题,给属性赋值. 在布局文件中可直接以  android:background="?attr/a ...

  2. DNS:www.flickr.com

    203.84.197.9 203.84.197.25 203.84.197.26 203.84.197.27

  3. 类型强转(type cast)

    类型转换有 c 风格的,当然还有 c++风格的.c 风格的转换的格式很简单(TYPEEXPRESSION),但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合适的, 因为它可以在任 ...

  4. RT-Thread的CPU使用率计算

    CPU 的使用率一般是我们比较关心的问题,在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率,并通过串口打印出来.首先我们在初始化线程中设置好钩子函数,并在 LED 线程中给系统人为的加入很多“ ...

  5. 解决ORA-00054资源正忙的问题

    有时候在drop表或者其他对象的时候,会遇到ORA-00054:资源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NO ...

  6. Windows2008 R2修改3389端口教程

    默认的3389端口有必要修改么,这个端口,我建议是修改一下为好,最好改大一点,这样安全性会高一点,但然面对高手级攻击,就没有用了,通常高手级过NMAP扫描一个你的IP地址,端便全然显现出来了,好了,下 ...

  7. Bootstrap页面布局19 - BS提示信息

    提示信息的设计 提示信息的类: .alert:提示信息类 .alert alert-danger: .alert alert-error: .alert alert-success: .alert a ...

  8. [转]通过Mesos、Docker和Go,使用300行代码创建一个分布式系统

    http://www.csdn.net/article/2015-07-31/2825348 [编者按]时下,对于大部分IT玩家来说,Docker和Mesos都是熟悉和陌生的:熟悉在于这两个词无疑已成 ...

  9. Oracle存储过程java 调用

    1.nest表组合成结果集,然后以游标变量的形式返回 --创建类型 create or replace package mytest is -- Author  : ADMINISTRATOR  -- ...

  10. Redis学习笔记--五种数据类型的使用场景

    String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...