GaussDB DN动态内存使用满导致DN主备切换

1、问题现象

客户反馈,在05:00--10:31之间GaussDB集中式在DN主备切换。

2、分析思路

  • 主备切换问题,通常先找到主备切换的节点,即原主DN,新主DN分别是哪个DN。
  • 然后先从cm_server主、cm_ctl等日志分析,确认主备切换的命令是由cm_server下发还是手动下发。
  • 最后如果是cm_server下发主备切换的命令,通常是原主DN异常,则分析原主DN 异常原因。

3、问题分析

3.1、确认DN主备切换时间点。

查看cm_server主日志,搜索关键词"Failover message has sent to instance",从日志中发现,2024-04-23 05:02:34,cm_server下发命令,将dn_6002切换为主DN。

cd $GAUSSLOG/cm/cm_server

vim cm_server-yyyy-mm-dd_******-current.log

继续查看cm_server主日志,搜索关键词"send switchover to instance",发现在2024-04-23 10:31:21,手工下发了switchover命令,将dn_6001切换为主。

经以上分析,2024-04-23 05:02:34因为dn_6001的某些故障,cm_server将主DN切换为dn_6002,2024-04-23 10:31:21手动下发switchover命令将dn_6001切换为主。

3.2、定位发生主备切换原因

查看DN进程,发现进程在05:02发生重启。

ps ux|grep dn

3.3、查看是否生成ffic日志

进入日志目录,发现存在ffic日志

cd $GAUSSLOG/ffic_log

3.4、分析ffic日志

查看ffic_log日志,发现dn_6001因为发生oom,被AI Watchdog杀掉进程,从而触发主备切换。

3.5、继续查看dn_6001日志。

搜索关键词,AI Watchdog,发现是因为动态内存上涨,触发AI Watchdog主备切换。

cd $GAUSSLOG/pg_log/dn_6001

vimpostgresql-yyyy-mm-dd_******.log

3.6、查看动态内存使用情况。

查看监控指标,动态内存使用率瞬间冲高。

3.7、查看dn_6001动态内存上下文

发现hashBatchContext上下文根动态内存使用高,判断可能为大的查询,其中的hash关联占用动态内存高。

cd $GAUSSLOG/mem_log/dn_6001_6002_6003

3.8、查找动态内存占用高的SQL语句。

发现占用动态内存高的SQL语句为insert into语句,该语句存在大量的关联查询,在执行该语句时发生申请内存失败,报错信息为:memory is temporarily unavailable。

cd $GAUSSLOG/pg_log/dn_6001

zgrep -i debug_query_id postgresql-yyyy-mm-dd_******.log.zg | awk -F 'consuming about' '{print $2}'|sort -nk1

4、解决措施

业务优化insert into语句。

相关推荐
人工智能知识库1 天前
华为HCCDP-GaussDB工作级开发者题库(带详细解析)
华为·gaussdb·hccdp-gaussdb·工作级开发者认证
robinson19881 天前
测试崖山-DM8-GaussDB-OpenTeleDB数据库在长事务下表和索引是否膨胀
达梦·表膨胀·gaussdb·openteledb·崖山
Gauss松鼠会3 天前
【GaussDB】从 sqlplus 到 gsql:Shell 中执行 SQL 文件方案的迁移与改造
数据库·sql·database·gaussdb
Gauss松鼠会3 天前
【GaussDB】跨用户调用已授权的存储过程,可能会在存储过程内SQL的自定义函数表达式里报错没有权限
数据库·sql·database·gaussdb
云和数据.ChenGuang4 天前
openGauss赋能新能源汽车智能制造——比亚迪MES系统数据库国产化升级案例
数据库·汽车·opengauss·gaussdb·数据库权限管理
云和数据.ChenGuang4 天前
GaussDB 期末考试题与面试题
数据库·opengauss·gaussdb·数据库期末试题
Neolnfra6 天前
openGauss部署配置指南
数据库·opengauss·gaussdb
DarkAthena7 天前
【GaussDB】跨用户调用已授权的存储过程,可能会在存储过程内SQL的自定义函数表达式里报错没有权限
数据库·sql·gaussdb
DarkAthena9 天前
【GaussDB】从 sqlplus 到 gsql:Shell 中执行 SQL 文件方案的迁移与改造
数据库·sql·oracle·gaussdb
NineData15 天前
如何通过 NineData 将 Oracle 不停机迁移到 GaussDB
数据库·oracle·gaussdb·数据库管理工具·ninedata·数据库迁移·迁移工具