实战 | 抽丝剥茧,掌数工程师带你“手撕”无法连接GP数据库问题
?

来源微信公众号:掌数科技(Hello_Dataknown)
导读
今天讲一个日常客户问题处理过程的案例。
一个“其貌不扬”的查询语句,竟导致无法连接GP数据库,甚至可能摧毁你的整个应用!
掌数工程师将从现象入手、根因分析、问题处理和总结建议几个方面,带您抽丝剥茧,逐步解读整个处理过程。
01.客户遇到难题了!
客户于3月13日下午1:56致电技术支持,报告用户无法连接GP数据库的状况。
通过与客户沟通发现Too Many Session的错误,并发现复制进程占用内存较多的情况。
02.究竟是谁在作妖?
在问题发生的当天,系统中有发生过很多次的Out of memory的错误,其中非常明显的是以下query:

来源微信公众号:掌数科技(Hello_Dataknown)
通过分析发现该query占用了100%的内存,其中计划器(Planner)就占用了49%的内存,执行器(Executor)又占用了22%的内存,Rollover占据了13.86%的内存。

来源微信公众号:掌数科技(Hello_Dataknown)
03.真相往往出乎意料
造成PSQL无法连接数据库的根因是:
master节点被该问题query占用了100%的内存,导致数据库无法正常连接。
该问题本身不是一个数据库的产品问题。
04.恢复就是这般简单高效
通过与客户沟通了解到Too Many Session的错误,并发现Standby进程在master服务器上内存使用率高的情况,进而:
1. 采用kill standby进程的方法,试图降低内存使用率。
2. 当进一步发现kill进程的方法不工作时,决定建议客户重启数据库。
3. 重启数据库后被占用的内存得到了释放,问题未再次出现。
05.下次咱们可以这样干
1)优化这条query,可以尝试打开优化器ORCA或者重写这条query。
2)因为一天之内发生了多次OOM问题,这条query是其中最明显的一条,建议减少并发。
3)检查gp_vmem_protect_limit 的设置,如果设置正常,可以考虑增加内存。
4)下次遇到这个情况,请使用top命令找出占用CPU和内存最多的语句,并尝试用Super User 和 psql 客户端连接数据库,再用pg_terminate_backend 和 pg_cancle_backend 去取消占用资源较多的query。
5)如果不能通过psql去连接数据库,请使用top命令找出占用CPU和Memory最多的query语句,并使用kill命令在系统层面结束query。
06.没有总结的结尾是没有前途的
本次的问题是PSQL无法进行连接到数据库,发生too many sessions的错误。
经日志分析发现有一条query占用了100%的内存,导致out of memory的内存溢出问题,导致所有用户无法连接。
技术支持建议:
1. 检查gp_vmem_protect_limit的参数是否还有提升空间;
2. 增大物理内存;
3. 降低系统并发数;
4. 打开优化器ORCA后,query消耗内存是否可以减少。
同时建议在下次出现类似报错需要应急时,可以采取从应用层面迅速降低系统并发数的方法来作为应急处理手段。
写在最后
每一次实战的背后,都承载着掌数工程客服团队多年积累的经验和心血,它们源自团队或有趣、或悲催、或奋力一搏的真实案例中提炼的疑难杂症解救之法。希望在你遇到难题之时有所助益,也希望能领略到掌数工程客服团队独有的匠心。
在您的日常工作中,有任何掌数科技相关技术及需求,欢迎和我们“掌数工程客服团队”交流,我们随时调动公司所有技术资源支撑客户。
咨询邮箱:service@dataknown.cn
客服热线:18930607585
更多相关内容,欢迎关注微信公众号:掌数科技(Hello_Dataknown)。