名词术语
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>

最新文章

  1. ajax+php+mysql 实现点赞、局部刷新,每个IP只能对一篇文章点赞一次
  2. 反射 Class类和Class实例
  3. CSS3动画事件
  4. 关于mysql中实现replace的sql语句
  5. CSS布局技巧 -- 纯CSS让子元素的宽度总和决定其父元素的宽度
  6. JQuery类型转换
  7. .htaccess设置自定义出错页面
  8. C# 打印多页tif
  9. win8.1 安装webaccess遇到的写访问权限错误
  10. Django练习——博客系统小试
  11. keil在线烧录突然提示 No target connected #
  12. Linux下FastDFS分布式存储-总结及部署记录
  13. 数据库操作类——C#
  14. POJ 2528 - Mayor's posters - [离散化+区间修改线段树]
  15. Uva1001 Say Cheese Floyd
  16. C#自定义处理事件(作者还没完全理解事件和委托,所以有可能错漏百出)
  17. properties 中文乱码问题的解决
  18. 系统对象的使用——Cookie,ViewState,Session,Application
  19. C1编译器的实现
  20. 使用AutoIT检测已安装软件,并将结果保存在桌面

热门文章

  1. UItableview section和cell的局部刷新
  2. Redis学习手册(Key操作命令)
  3. TCP/IP简介
  4. window下mysql的1053错误
  5. n0_n1
  6. 【java】由equals和==的区别引出的常量池知识
  7. css层叠选择
  8. iOS 键盘隐藏
  9. URL编码数据转换为JSON数据
  10. Android项目框架升级尝鲜OkHttp