2017-03-27Oracle故障gc buffer busy acquire导致数据库不可用

   实施反馈系统有20分钟不可用,然后又自动恢复了。先查看alert日志,看到打开文件数不够,系统已经运行几年了,怎么可能呢。

   Non critical error ORA-48180 caught while writing to trace file "/u01/app/ora/diag/rdbms/nwzcdb/nwzcdb2/trace/nwzcdb2_ora_195339.trc"
Error message: Linux-x86_64 Error: 23: Too many open files in system

   检查数据库服务器的配置,ulimit -a ,发现oracle hard nofile 65536,应该是足够大的。

   查看问题时段的数据库报告,发现数据库过载了。


Snap Id Snap Time Sessions Cursors/Session Instances
Begin Snap:1315824-3月 -17 09:00:2715317.52
End Snap: 13159 24-3月 -17 10:00:38 1810 10.0 2
Elapsed:
60.18 (mins)


DB Time:
32,066.54 (mins)


   11g开始gc buffer  busy分为gc buffer busy acquire和gc buffer  busy release:
   gc buffer busy acquire是当session#1尝试请求访问远程实例(remote  instance) buffer,但是在session#1之前已经有相同实例上另外一个session#2请求访问了相同的buffer,并且没有完成,那么session#1等待gc buffer busy acquire。
   gc buffer busy release是在session#1之前已经有远程实例的session#2请求访问了相同的buffer,并且没有完成,那么session#1等待gc buffer busy release。


Event Waits Total Wait Time (sec) Wait Avg(ms) % DB time Wait Class
gc buffer busy acquire 288,206 568.5K 1972 30.5 Cluster
enq: TX - index contention11,889325K2733517.5Concurrency
buffer busy waits 54,302 217.9K 4012 11.7 Concurrency
gc buffer busy release228,772200.8K87810.8Cluster
gc current grant busy 251,301 73.6K 293 4.0 Cluster
gc current block congested109,35671.2K6513.8Cluster
gc cr block congested 25,922 69.2K 2669 3.7 Cluster
gc cr grant congested30,96742.1K13602.3Cluster

我认为可能是两个原因造成的:

1. 低效SQL,逻辑读过大,且访问频繁,造成争用严重。

2. 数据库IO资源紧张,导致一些频繁访问的SQL语句响应慢,造成gc buffer busy acquire,gc buffer busy release等待事件。

定位是否是原因1的问题,就找Segments by Global Cache Buffer Busy。然后根据对象的名称去找对应的SQL,然后查看SQL的执行计划定位问题。

Segments by Global Cache Buffer Busy

  • % of Capture shows % of GC Buffer Busy for each top segment compared
  • with GC Buffer Busy for all segments captured by the Snapshot
Owner Tablespace Name Object Name Subobject Name Obj. Type GC Buffer Busy % of Capture
LCSC LCSC_DATA INDEX_LOG_UO_OPERATE_TIME
INDEX 266,048 36.39
LCSCLCSC_DATASS_SECURITY_RESPONSIBILITY
TABLE112,42515.38
LCSC LCSC_DATA DIS_TRANSFER P_0501 TABLE PARTITION 62,460 8.54
LCSCLCSC_DATAINDEX_LOG_FUN_OPER_DATE
INDEX27,8163.80
LCSC LCSC_DATA DIS_TRANSFER P_0507 TABLE PARTITION 27,775 3.80


    定位是否是问题2造成,先查看数据库IO的整体情况,如果是RAC,多个节点都要看,因为RAC是共享存储,消耗IO总量是多个节点之和。如果如下图所示,相比数据库正常的时刻是非常大的。

    如何判断是否是问题2影响了问题1,就查看问题1找到的SQL是否有消耗IO,如果有,则有影响。

IOStat by Function summary

  • 'Data' columns suffixed with M,G,T,P are in multiples of 1024 other columns suffixed with K,M,G,T,P are in multiples of 1000
  • ordered by (Data Read + Write) desc

Function Name Reads: Data Reqs per sec Data per sec Writes: Data Reqs per sec Data per sec Waits: Count Avg Tm(ms)
Direct Reads 475.2G 209.64 134.921 1.8G 3.97 .503M 0
Buffer Cache Reads34G327.399.649M0M0.000M616.6K9.91
Direct Writes 5.8G 1.72 1.646M 22.6G 33.85 6.418M 0
Others5G7.071.407M5.1G11.221.441M26.1K2.24
DBWR 0M 0.01 0M 8.6G 217.96 2.44M 20 34.20
LGWR153M2.73.042M4.5G214.761.292M679.9K1.03
TOTAL: 520.1G 548.55 147.665 42.6G 481.76 12.094M 1322.6K 5.20

   问题2的定位是通过segments by physical reads来找到相应的SQL。

Segments by Physical Reads

  • Total Physical Reads: 67,312,485
  • Captured Segments account for 81.6% of Total
Owner Tablespace Name Object Name Subobject Name Obj. Type Physical Reads %Total
LCSC LCSC_DATA FUNCTION_LOCATION P_DEFAULT_SUB_P_0502 TABLE SUBPARTITION 12,612,706 18.74
LCSCLCSC_DATAFUNCTION_LOCATIONP_DEFAULT_SUB_P_0501TABLE SUBPARTITION7,703,11111.44
LCSC LCSC_DATA FUNCTION_LOCATION P_DEFAULT_SUB_P_0505 TABLE SUBPARTITION 7,258,626 10.78
LCSCLCSC_DATAFUNCTION_LOCATIONP_DEFAULT_SUB_P_0503TABLE SUBPARTITION6,005,6578.92
LCSC LCSC_DATA FUNCTION_LOCATION P_DEFAULT_SUB_P_0507 TABLE SUBPARTITION 4,008,989 5.96


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值