问题现象
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 修改。