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