Oceanbase执行大表的DDL这样算慢吗,有什么优化措施

测试环境
cpu 16c 内存28g 硬盘非ssd 3台集群,oceanbase版本: 4.1.0社区版

如下测试表

CREATE TABLE service_log_info2 (
log_id BIGINT(20) NOT NULL COMMENT ‘日志id’,
trace_id VARCHAR(50) NOT NULL COMMENT ‘日志追踪id’,
span_id VARCHAR(50) DEFAULT NULL COMMENT ‘日志追踪spanid’,
belong VARCHAR(50) DEFAULT NULL COMMENT ‘服务所属系统’,
caller VARCHAR(50) DEFAULT NULL COMMENT ‘访问系统 -服务请求方系统’,
app_name VARCHAR(50) DEFAULT NULL COMMENT ‘服务组件名称’,
service_name VARCHAR(200) DEFAULT NULL COMMENT ‘服务名称’,
service_url VARCHAR(200) DEFAULT NULL COMMENT ‘服务url’,
service_method VARCHAR(200) DEFAULT NULL COMMENT ‘服务类方法名’,
http_method VARCHAR(10) DEFAULT NULL COMMENT ‘http方法名’,
req_ip VARCHAR(50) DEFAULT NULL COMMENT ‘请求ip’,
req_start DATETIME NOT NULL COMMENT ‘请求开始时间’,
req_end DATETIME DEFAULT NULL COMMENT ‘请求结束时间’,
status INT(2) DEFAULT NULL COMMENT ‘请求状态 1-成功 0-失败’,
cost INT(10) DEFAULT NULL COMMENT ‘请求耗时,单位毫秒’,
req_timestamp BIGINT(11) DEFAULT NULL COMMENT ‘请求开始时间戳’,
input_param LONGBLOB DEFAULT NULL COMMENT ‘入参’,
PRIMARY KEY (log_id),
KEY IDX_TRACE_ID (trace_id)
) DEFAULT CHARSET=utf8mb4 COMMENT=‘服务交易日志信息表’;

其中生成了1000w的数据,在此基础上测试了一些DDL语句执行效率
新增字段 耗时12分44秒
ALTER TABLE service_log_info2 ADD COLUMN service_note2 VARCHAR(100) NULL DEFAULT NULL COMMENT ‘服务备注’ AFTER service_name;
删除已有字段 12分49秒
ALTER TABLE service_log_info2 DROP COLUMN service_note2;
添加索引 2分1秒
ALTER TABLE service_log_info2 add index IDX_SPAN_ID(span_id);
删除索引 3.2秒
ALTER TABLE service_log_info2 drop index IDX_SPAN_ID;

这样的时间在oceanbase上算慢吗,有什么优化措施没

1 个赞

开并行DDL试试

1 个赞

如何开启呢

设置并行度:
set session _force_parallel_ddl_dop = 8;
set global parallel_servers_target = 100;

1 个赞


设置完毕后提升不太明显

explain 看下计划

DDL语句没有执行计划吧

那再调整下面这几个参数看看(建议一个个来)

  1. alter system set sys_bkgd_net_percentage = 100;
  2. set global ob_sql_work_area_percentage = 80;
  3. alter system set _temporary_file_io_area_size = ‘10’ tenant = ‘xxx’;

应该还行吧,不影响业务就行。