【维护案例】绝对表空间使用不规范致使内存异常

举报
Caesar.D 发表于 2021/01/28 17:21:46 2021/01/28
【摘要】 维护案例分享


1.  问题描述

版本:GaussDB A-8.0.0.1

1月18日下午3时,客户反馈执行业务脚本报错:-bash: fork: Cannot allocate memory,执行基本的OS命令均不能成功。

image.png


2.  问题根因分析:

1.       查看OS日志,发现一Gauss进程占用内存达到130G+,系统内存不足,将其kill

image.png

2.       查看Gauss进程启动时间,找到一节点启动时间在报错时间段

image.png

3.       使用top命令查看此节点内存占用情况,此时已达到130G+

image.png

4.       登录此节点查看每个session所占用的内存,找到一个异常session内存占用达到140G+,且还在不停的快速增长;

image.png

5.       根据其pid通过数据库视图查到异常的sql语句为gs_rewind发起,其与相应备节点的build相关;

image.png

6.       该语句会扫描实例下的所有数据,由于使用绝对表空间并将位置定义到了data1,导致扫描产生死循环;

image.png

7.       因此,此sql不断占用内存,最后将系统内存耗尽,产生报错。


3. 根因分析

备机修复的时候会去主实例同步数据,主实例扫描节点下数据,由于使用绝对表空间且其路径定为/srv/BigData/mppdb/data1,主实例会去目录扫描,造成死循环,因此消耗大量内存导致节点被kill

4. 规避措施  

方案中所有图片均为家里复现收集,实际以现场环境为主!

1.       登录数据库后使用\db查询表空间,可以看到wd使用了绝对路径,此路径造成备机build的死循环;

image.png

2.       找到所有CN所在路径:cm_ctl query –Cvd| grep coo,截图保留;

image.png

3.       停集群,cm_ctl stop -mi

image.png

4.       进入物理机1上的/srv/BigData/mppdb/data1目录;

image.png

5.       mkdir创建一个文件夹,并将所有PG目录拷贝到新建的目录中;

image.png

6.       其他物理机重复此操作;

7.       回到物理机1上,进入/srv/BigData/mppdb/data1目录后,进入到master下的pg_tblspc目录,将软连接更新为刚创建的目录的绝对路径;

image.png

8.       进入到/srv/BigData/mppdb/data1下的slave目录,再进入至pg_tblspc目录,同样更新软连接;

image.png

9.       进入到/srv/BigData/mppdb/data2下的master目录,重复7~8步,直至物理机上所有的masterslave均更新了表空间软连接;

10.   再到物理机2上重复7~9,直至所有机器完成;

11.   登录到相应机器上的CN目录(步骤2),在pg_tblspc下同样更新软连接;(每台机器都要做)

image.png

12.   启动集群:cm_ctl start

image.png

13.   登录数据库查看表空间绝对路径是否发生变化;

image.png

14.   查看此时集群状态以及内存情况,无占用内存过高的session且集群状态变为normal则恢复;

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。