修改一个小表的表结构,执行耗时过长

【 使用环境 】测试环境
【 使用版本 】OceanBase 4.2.2 社区版

CREATE TABLE `gs_user_info` (
  `id` int(10) unsigned NOT NULL COMMENT '用户ID',
  `agent_hit_count` int(10) unsigned NOT NULL DEFAULT '0',
  `add_time` datetime(3) NOT NULL COMMENT '添加时间',
  `update_time` datetime(3) NOT NULL COMMENT '修改时间',
  `facebook` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  `telegram` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  `whatsapp` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) COMMENT = '用户信息表';

原始表结构如上,该表内只有 28927 条数据,且大部分数据为 null
ob-a

执行如下 ALTER TABLE 语句(只是将字段长度从 100 调整为 64),耗时 21s多,这个耗时算是比较久了。
ob-b

执行如下SQL查询 sql_audit:

SELECT * FROM oceanbase.GV$OB_SQL_AUDIT WHERE QUERY_sql LIKE '%ALTER%'

结果如下:

请问,这个结果正常吗 ?为什么执行表结构变更需要这么久呢 ?

修改表结构耗时长有可能是修改表期间表被调用,或者有锁导致的,您可以根据执行sql的sql audit 中的trace id 过滤下问题发生时间段的observer.log,提供下过滤结果,这边看下

感谢您的热心回复。初步看了一下,可能和磁盘是 HDD 的有关,虽然该表没有锁,但是其他表有一些数据插入。

此外,我想问一下,分布式数据库的数据量一般都比较大,动辄成百上千亿,这种情况下改动表结构,比如新增 字段、索引,OceanBase 有什么好的办法吗 ?

OceanBase 数据库是支持Online DDL 和 Offline DDL 操作的,具体支持操作列表以及变更规则您可以参考官方文档:OceanBase分布式数据库-海量数据 笔笔算数