执行ddl语句报Server out of disk space

【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.2.0
【问题描述】
准备给表prod_sync_p_tiktok_extra 按照store_acct_id作hash分区
执行sql报错:


ALTER TABLE prod_sync_p_tiktok_extra
DROP PRIMARY KEY,
ADD PRIMARY KEY (id, store_acct_id) USING BTREE;

ocp显示数据使用量情况:

表prod_sync_p_tiktok_extra总数据大小:

表prod_sync_p_tiktok_extra存在2个大字段,分别为varchar(5000)和varchar(10000)

这个是有可能的,当前部分算子是不支持临时文件压缩的,修改表类型时数据重分布会先落到临时文件中,当前库里的数据是压缩的,临时文件不压缩可能会膨胀多倍,超出磁盘大小。后续版本会逐渐优化临时文件压缩问题。

当前可以新建个hash表,insert into select方式绕过下。

1 个赞

直接2.2.0 版本的obdiag 根因分析
obdiag rca run --scene=ddl_disk_full

关于使用可以看下这篇博客:OceanBase 社区

obdiag rca run --scene=ddl_disk_full --input_parameters='{"tenant_name":"xxxx","table_name":"xxxx","action_type":"add_index","index_name":"xxxx"}'

xxxx部分自行替换下即可