暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GUC参数most_available_sync reload不生效问题

由迪 2024-04-24
258

原作者:黄宸宁

适用范围
MogDB Version:3.0.2 to 3.0.7

MogDB Version:5.0.0 to 5.0.5

问题概述
most_available_sync参数修改后执行reload,使用show most_available_sync可以观察到参数发生了改变。但是使用gs_ctl query查看最大可用模式并不会立即生效,而且也不会实际发挥最大可用模式的作用,此问题必现。这个问题在【3.0.2 ~ 3.0.7】和【5.0.0 ~ 5.0.5】版本出现。

后面对此问题进行了修复,产生了一个新的问题,对most_available_sync参数进行reload时,当前主库如果处于高频业务状态,高概率可能发生core。

问题原因
gs_ctl query取值不是使用的GUC most_available_sync的值,而是内存中一个全局变量的值。在relaod时加载变化的GUC,如果有此时活动session,可以通过session处理重新加载全局变量的值。在没有活动session的情况下,全局变量的值无法改变,因此无法实际变更最大高可用模式。

复现方法

  1. 搭建主备库

  2. 使用gs_ctl query在主库查询到sync_most_available为off

[2024-04-16 16:04:03.794][2240210][][gs_ctl]: gs_ctl query ,datadir is /home/lchch/h1/mogdb302/data

local_role : Primary
sync_priority : 1
sync_most_available : Off
channel : ::1:12211–>::1:43852

Receiver info:
No information
3. 将conf文件里的most_available_sync参数改为on,并执行reload

MogDB=# show most_available_sync;
most_available_sync

on
(1 row)

MogDB=# \q
lchch@deepin:~$ gs_ctl query
[2024-04-16 16:36:29.119][2241001][][gs_ctl]: gs_ctl query ,datadir is /home/lchch/h1/mogdb302/data

........
receiver_replay_location       : 0/4003020
sync_percent                   : 100%
sync_state                     : Sync
sync_priority                  : 1
sync_most_available            : Off
channel                        : ::1:12211-->::1:43852
       ........

可以看到,most_available_sync参数已设置为on,但是gs_ctl query查询到的值为off

结论
在【3.0.2 ~ 3.0.7】和【5.0.0 ~ 5.0.5】版本存在reload most_available_sync参数不生效的问题。

解决方案
方案一:在reload时保证有一个活跃session,在执行完reload操作之后,在活跃session执行任意sql即可。

方案二:在【3.0.7】和【5.0.4 ~ 5.0.5】版本,存在relaod most_available_sync参数时产生core的问题。此问题暂无规避方案,建议客户升级至【3.0.8】和【5.0.6】版本。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论