某客户报表系统Oracle数据库挂起问题分析处理
一、概要
某客户报表系统Oracle数据库在3月5号、6号均出现一节点实例短暂挂起现象,挂起现象有两种,第一是普通用户不能登录数据库,第二是sys用户可以登录数据库,但是做简单的select查询时数据库不能响应,查询挂起。
客户这套数据库为两节点RAC,运行在某一体机上,数据库上应用在24小时执行跑批动作,数据库版本为11.2.0.4。
二、问题分析说明
2.1分析数据来源
数据库中的awr报告、awr对比报告、ash报告、ash源数据、oswatch采集数据、OEM、数据库参数,由于数据库alert中没有明显的ora报错所以没有截取数据库的alter信息。
2.2分析过程
- 3月5日出现短暂HANG的情况出现的时间点为
sample_id='39901949'里全是跑批的事务,达681个,与此同时应用程序发起会话是并没有限制并行,会话最大并行达到了112个。
- 该批量任务是造成数据库短暂HANG的原因
可以看出会话出现大量等待,并且查询会话都开启了并行
- 3月6号出现短暂HANG的情况出现的时间点非常多
表中时间片上的活动事务均为跑P事务
- 相对5号来说,6号的批量事务更多。所以HANG的时间相对更久
- 以下为6号主要topsql
- awr中看到的信息
从awr报告中可以看出耗时最长的事件发生在并行查询上
- SQL耗时统计
- 排在第一位的SQL语句
|
这是一条简单的计数查询语句,因此表上索引存在并行,所以操作表是默认走了并行。
三、问题总结
根据以上数据分析,这套数据库出现挂起现象时,该数据库中的会话均出现大量并行的操作,通过oem采集的数据发现个别会话并行数达到了112。由此可以确定这套数据库挂起原因为并行导致。
四、处理建议
- 根据awr和执行计划,分析topsql耗时在哪方面,实行具体优化。
- 控制批量事务的并行度,以CPU实际运行状态,和跑批SQL运行效率来调整并行度。
- 该库为跑P数据库,相对来说,8GB内存太少了,可适当分配多一些内存给该库,提高跑P效率,且内存用的是自动管理,建议参照最佳实践进行配置。
五、附录
1.虽然查出是并行引起的数据库挂起,但进一步分析以及询问应用方面人员后,发现某些表上建立索引的时候就运用了并行,所以导致每次操作表的时候默认走了索引的并行。
2.出问题的数据库是部署在某一体机平台上的,并且该集群下创建了多套数据库实例。如果多个数据库上都有并行存在,在业务量集中到一个时间点的话,影响小的话会挂起节点实例,影响大的话可能会波及数据库服务器上的其他实例。这对于数据库来说是一个潜在的隐患。