polardb添加索引报错Fail to get MDL on replica during DDL

已解决

polardb添加索引报错Fail to get MDL on replica during DDL synchronize

展开
收起
阿里云服务支持 2022-12-28 09:46:55 413 分享 版权
阿里云 AI 助理回答

遇到报错Fail to get MDL on replica during DDL synchronize,表明在为PolarDB添加索引时,由于只读节点上存在大查询或长事务导致MDL(元数据锁)获取失败。根据您的情况,可以按照以下步骤解决:

  1. 确认集群版本: 确保您的PolarDB MySQL版集群版本满足抢占式DDL功能的要求,具体版本如下:

    • 5.6版本需修订至5.6.1.0.43及以上。
    • 5.7版本需修订至5.7.1.0.34及以上。
    • 8.0.1版本需修订至8.0.1.1.39及以上。
    • 8.0.2版本需修订至8.0.2.2.14及以上。
  2. 开启抢占式DDL功能: 在只读节点上,通过设置系统变量来开启抢占式DDL:

    SET polar_support_mdl_sync_preemption = ON;
    

    这将允许在等待超时后,DDL操作可以中断只读节点上的阻塞线程以继续执行。

  3. 配置等待超时时间(可选): 可以调整等待超时的阈值,以控制何时开始抢占线程。这通过全局参数loose_polar_mdl_sync_preempt_after_wait_second完成:

    SET GLOBAL loose_polar_mdl_sync_preempt_after_wait_second = 超时秒数;
    

    默认值为10秒,您可以根据需要调整该值,但请注意,此参数为全局级别设置。

  4. 重新执行DDL操作: 在完成上述设置后,尝试重新执行添加索引的操作。例如:

    ALTER TABLE your_table ADD INDEX idx_your_column (your_column);
    
  5. 注意事项

    • 开启抢占式DDL可能会导致只读节点上的连接中断或未完成的SQL回滚,请谨慎操作。
    • 功能生效条件要求loose_replica_lock_wait_timeout参数值大于(loose_polar_mdl_sync_preempt_after_wait_second+5)秒。
    • 对于MySQL 8.0.1和8.0.2版本,建议使用ALTER TABLE RENAME替代rename路径下的操作。

通过以上步骤,您应该能够解决在PolarDB中添加索引时遇到的MDL锁获取失败问题。如果问题依旧,请检查是否有其他未提交的事务或长时间运行的查询,并考虑进行提交或回滚操作,或者直接联系阿里云技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about

收录在圈子:
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
还有其他疑问?
咨询AI助理