polardb添加索引报错Fail to get MDL on replica during DDL synchronize
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到报错Fail to get MDL on replica during DDL synchronize
,表明在为PolarDB添加索引时,由于只读节点上存在大查询或长事务导致MDL(元数据锁)获取失败。根据您的情况,可以按照以下步骤解决:
确认集群版本: 确保您的PolarDB MySQL版集群版本满足抢占式DDL功能的要求,具体版本如下:
开启抢占式DDL功能: 在只读节点上,通过设置系统变量来开启抢占式DDL:
SET polar_support_mdl_sync_preemption = ON;
这将允许在等待超时后,DDL操作可以中断只读节点上的阻塞线程以继续执行。
配置等待超时时间(可选): 可以调整等待超时的阈值,以控制何时开始抢占线程。这通过全局参数loose_polar_mdl_sync_preempt_after_wait_second
完成:
SET GLOBAL loose_polar_mdl_sync_preempt_after_wait_second = 超时秒数;
默认值为10秒,您可以根据需要调整该值,但请注意,此参数为全局级别设置。
重新执行DDL操作: 在完成上述设置后,尝试重新执行添加索引的操作。例如:
ALTER TABLE your_table ADD INDEX idx_your_column (your_column);
注意事项:
loose_replica_lock_wait_timeout
参数值大于(loose_polar_mdl_sync_preempt_after_wait_second
+5)秒。ALTER TABLE RENAME
替代rename路径下的操作。通过以上步骤,您应该能够解决在PolarDB中添加索引时遇到的MDL锁获取失败问题。如果问题依旧,请检查是否有其他未提交的事务或长时间运行的查询,并考虑进行提交或回滚操作,或者直接联系阿里云技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about