主备租户变量同步问题

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.1.7
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!


随便改了一个系统变量parallel_degree_limit,备租户没有被同步修改呢?@论坛小助手

用户问题总结:在 OceanBase 4.2.1.7 版本中,修改主租户的系统变量 parallel_degree_limit 后,备租户未同步该变量值。

针对此问题,推荐使用 obdiag 工具进行日志采集,以便确认主备库之间的同步状态以及可能存在的延迟或配置差异。

日志采集场景: 主备库延迟

日志采集命令: obdiag gather scene run --scene=observer.delay_of_primary_and_backup

解释:

上述命令将收集主备库之间的延迟相关信息,包括但不限于主备库的同步状态、日志应用进度等,从而帮助我们分析为什么备租户未能同步主租户的系统变量变更。

为了更好地定位问题,请您按照以下步骤操作:

  1. 执行上述 obdiag gather scene run --scene=observer.delay_of_primary_and_backup 命令,采集日志并提供给我们。
  2. 如果可能,请提供主备库的相关配置信息(如同步模式、网络延迟等)。

另外,为了进一步明确问题原因,请您回答以下问题:

  1. 您是否确认主备库之间的同步模式为同步还是异步?如果是异步同步,是否存在较大的延迟?
  2. 您是否尝试过重启备租户以检查变量是否能够重新同步?
  3. 您是否在主租户上执行了其他可能导致备租户不同步的操作(例如 DDL 或者特定的管理命令)?
  4. 您能否提供具体的主备库版本号以及相关的集群配置信息(如是否有多个副本等)?
  5. 您是否观察到备租户的日志中有任何与同步相关的错误或警告信息?如果有,请一并提供。

附上敏捷诊断工具 obdiag 使用帮助链接

随便改了一个系统变量parallel_degree_limit,备租户没有被同步修改呢?几乎没有主备延迟@论坛小助手

根据文档库中的信息,主租户和备租户的系统变量同步行为有明确的规定。以下是具体分析:

系统变量同步规则

根据 功能使用限制共享存储 → 物理备库 的文档内容(见【功能使用限制】和【共享存储 → 物理备库】章节),以下几点需要注意:

  1. 主租户和备租户的系统变量物理同步:如果在主租户上修改了系统变量,这些变更会同步到备租户。
  2. 例外情况:某些隐藏配置项(以 _ 开头)或特定的系统变量可能不会自动同步,需要手动调整。

问题分析

您提到修改了系统变量 parallel_degree_limit,但备租户未同步该变量值。结合上述规则,可能存在以下原因:

  1. 变量类型parallel_degree_limit 是否为隐藏配置项或特殊变量?如果是,它可能不在自动同步范围内。
  2. 主备延迟:尽管您提到几乎没有主备延迟,但仍需确认备租户是否完全应用了最新的日志。
  3. 同步机制异常:可能存在同步机制的问题,例如网络中断、日志断流等。

解决方案

1. 检查变量是否为隐藏配置项

运行以下命令,检查 parallel_degree_limit 是否为隐藏配置项:

obclient> SHOW VARIABLES LIKE 'parallel_degree_limit';

如果变量以 _ 开头,则为隐藏配置项,不会自动同步到备租户。

2. 确认主备同步状态

运行以下命令,检查主备租户的同步状态:

obclient> SHOW TENANT BACKUP STATUS;

确保备租户的日志应用进度与主租户一致。

3. 手动同步变量

如果确认 parallel_degree_limit 不在自动同步范围内,可以在备租户上手动执行以下命令:

obclient> ALTER SYSTEM SET parallel_degree_limit = <value>;

<value> 替换为您在主租户上设置的值。

4. 检查日志和诊断信息

如果问题仍未解决,请收集以下信息进行进一步排查:

  • 使用 obdiag 工具采集主备库的日志和诊断信息:
    obdiag gather scene run --scene=observer.delay_of_primary_and_backup
    
  • 检查备租户的日志中是否存在与同步相关的错误或警告信息。

总结

根据文档内容,主租户和备租户的系统变量通常会物理同步。如果 parallel_degree_limit 未同步,可能是由于变量类型或同步机制异常导致。建议按照上述步骤逐一排查,并提供相关日志以便进一步分析。

检索到的文档如下:

  1. 物理备库同步过程中卡住
  2. replica_parallel_migration_mode
  3. 设置日志恢复终点
  4. 删除主备租户
  5. 功能使用限制
  6. 使用限制
  7. standby_fetch_log_bandwidth_limit
  8. 设置日志同步限速

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

根据您提供的信息以及 OCR 提取的内容,可以明确以下几点:

  1. 主备租户的系统变量同步问题
    根据文档信息,主租户和备租户的系统变量不会物理同步。如果在主租户上修改了系统变量,需要手动检查是否需要在备租户上进行相同的修改。具体参考如下内容:

    主租户和备租户的配置规格独立,不会物理同步。如果修改了主租户的配置项,需要判断是否需要同步修改备租户的相应配置项。

    (来源:OCR 提取内容)

  2. parallel_degree_limit 的作用范围
    parallel_degree_limit 是一个控制并行执行线程数的变量,通常用于优化查询性能。该变量的修改仅对当前租户生效,且主备租户之间不会自动同步此类变量。

  3. 主备延迟几乎为零的情况
    您提到几乎没有主备延迟,这表明主备库之间的日志同步(如 Redo 日志)是正常的。但需要注意的是,系统变量的修改不会通过日志同步到备租户,因此即使主备延迟为零,备租户也不会自动同步主租户的变量修改。


解决方案

1. 手动同步备租户的变量

如果您希望备租户也应用相同的 parallel_degree_limit 值,可以通过以下步骤手动设置:

  • 登录备租户,执行以下 SQL 语句:

    SET GLOBAL parallel_degree_limit = <value>;
    

    其中 <value> 是您在主租户上设置的具体值。

  • 确认变量已生效:

    SHOW VARIABLES LIKE 'parallel_degree_limit';
    

2. 自动化同步(可选)

如果需要频繁同步主备租户的变量,可以编写脚本定期检查主备租户的变量值,并在备租户上执行相应的 SET GLOBAL 命令。

3. 注意事项

  • Session 级别与 Global 级别
    如果您在主租户上使用的是 SET SESSION 修改变量,则该修改仅对当前会话生效,其他会话或备租户均不受影响。如果需要全局生效,请确保使用 SET GLOBAL

    示例:

    SET GLOBAL parallel_degree_limit = <value>;
    
  • 权限要求
    修改 Global 级别的变量需要用户拥有足够的权限(如 MySQL 租户的 SUPERALTER SYSTEM 权限)。请确保当前用户具有相应权限。


总结

主备租户的系统变量不会自动同步,这是 OceanBase 数据库的设计行为。如果需要备租户也应用相同的变量值,请手动登录备租户并执行相应的 SET GLOBAL 命令。如果您有更多疑问或需要进一步帮助,请提供更多上下文信息(如具体的变量值、主备租户的配置等)。

具体信息可参考以下文档:

  1. 设置日志同步限速
  2. OceanBase 数据库性能的影响因素
  3. 修改租户系统变量
  4. 设置并行执行参数
  5. 租户内均衡
  6. 物理备库
  7. 设置参数和变量
  8. 负载均衡
  9. 物理备库概述

后面同步过去了么?日志同步是否有延迟?其他的变量修改是否能同步?

刚刚试了下几个变量,可以正常同步了。
可能是因为上次没有重新登录,global没生效 :grinning: