发现版本
openGauss 3.0.5及以前
问题概述
SQL执行hang住,查看该会话状态为wait_wal_sync,使用pg_terminate_backend和pg_terminate_active_session_socket均无法杀掉,如图

排查步骤
- 调整synchronous_standby_names=local
- 调整most_available_sync=on
- 尝试重启发现数据库停不掉
临时解决方案
kill掉数据库进程后,重新拉起,会话消失
建议:先尝试重启数据库,若无法正常停止数据库,再尝试kill掉数据库进程
问题原因
walsender线程在运行SetXactLastCommitToSyncedStandby()函数时,可能会发生FATAL报错,导致当前walsender线程退出,退出时有可能已经通过pHead和pTail的倒换修改了,全局数据中的等待线程信息。
这样下一次walsender重启后,就无法再通知到walsender线程崩溃时误移除的线程,因此这些业务线程就处于永远等待的状态。
版本修复
相关pr:https://gitee.com/opengauss/openGauss-server/pulls/5716
预计930合入
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




