1. 分析及解决方案概述
分析原因
- 由于某业务中台应用程序存在一些性能不佳的SQL语句,未创建索引,执行效率极低,且在问题发生时段内频繁调用(6000余次/分钟),导致应用连接数据库的会话数暴增,服务器内存被耗尽并HANG死。
解决方案
- 发现数据库服务器内存被耗尽后,临时调整了操作系统内存大页参数,设置上限值(官方手册中该参数默认关闭),并重启服务器使参数生效,避免应用会话数无限增加而耗尽内存。
2. 问题描述
- 2024年2月25日16时18分,接监控告警电话,业务中台数据库2节点状态异常inactive,1节点正常对外提供服务,应用的长连接未发生中断,排查发现,应用连接数据库的会话数激增(共4800多个),导致数据库服务器内存被耗尽,无法正常处理应用请求。
操作系统版本 | RHEL 7 |
---|---|
数据库架构 | RAC集群 |
数据库版本 | 19.5.0 |
3. 问题分析
3.1 问题现象
- 由于业务中台数据库2节点状态为不活跃状态,登录数据库进行检查,服务器资源已全部耗尽,
CPU、内存使用率均已到达98%以上。而后通过数据库1节点检查,具体语句如下:
a) 问题语句1
图表 1 SQL语句和执行计划
图表 2表大小
图表 3每个小时语句执行次数
b) 问题语句2
图表 4 SQL语句和执行计划
图表 5 表大小
图表 6 每个小时语句执行次数
c) 问题语句3
图表 7 SQL语句和执行计划
图表 8 表大小
图表 9 每个小时语句执行次数
d) 问题语句4
图表 10 SQL语句和执行计划
图表 11 表大小
图表 12 每个小时语句执行次数
3.2 问题分析总结
- 综合上述分析,我们可以看到:多条执行效率差的sql语句,这些语句在查询表时会使用全表扫描,并且执行次数过多,问题语句抢占服务器资源过多,导致问题发生
4. 处理/优化建议
- 优化应用程序,针对抓取到的SQL语句进行分析优化,创建适当索引,提高执行效率,避免应用连接数暴增问题。
- 加强协作,如再次发生诸如内存耗尽、交易缓慢等问题,第一时间联系我室人员进行排查分析。同时测试阶段如有需要,也请及时联系我们。