【862 版本】alter table 导致 ddlevent

在86版本的产品中,当一个session执行CREATE TABLE并进行SELECT SLEEP时,另一个session尝试ALTER TABLE修改列可能导致DDL事件。由于默认的表锁超时为50秒,超过这个时间会记录DDLEVENT并自动恢复。可以使用table_lock_wait_timeout变量调整超时时间。解决方案是理解这种并发行为并适当调整超时设置。
摘要由CSDN通过智能技术生成
问题现象
session1:
create table test20201119 (a1 varchar(10),a2 varchar(20));
执行 select sleep(80) from test20201119;
session2 执行
ALTER TABLE test20201119 modify column a1 varchar(10) DEFAULT NULL
COMMENT '第一个字段';
执行结果:
alter table 执行完成后,产生 ddlevent,一段时间后,ddlevent 自动恢复。
解决方法:
86 版本的产品现状,查询先加锁,alter 等待该锁释放,ddl 的默认锁超时是 50 秒,
超时之后返回错误,在该节点记录了 event,所以,当 50 秒之后,ddl 就会报告
can't lock table 的错误,alter table 操作的执行节点的 gc 层会记录一个
ddlevent,这时其他节点的 gc 和 gn 已经执行成功。之后 ddlevent 自动恢复,
超时时间默认 50 秒,可以通过变量 table_lock_wait_timeout 修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值