问题描述
在 OceanBase 4.x 版本中,假设表 tb1 的某一个列 C7 是 varchar(20),通过如下命令减少其长度为 18:
obclient> alter table tb1 modify column C7 varchar(18);
此时与 tb1 相关的 DML 会被阻塞,如 insert 语句会被阻塞。
问题原因
减少列类型长度或精度时,OceanBase 数据库需要锁表,锁表后需要重整该表的数据以达到减少列类型长度的目的,数据重整完毕后才会解开表锁,故在该 DDL 执行期间,会阻塞其他 DML 请求。
问题的风险及影响
此类 DDL 执行后,会阻塞业务相关请求,进而可能导致严重业务问题。
适用版本
OceanBase 数据库 V4.x 版本
影响的租户
OceanBase 数据库中的 SYS 租户、MySQL 租户、Oracle 租户。
解决方法
通过 kill session id 命令终止掉 DDL 命令的执行。