【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5.2
【问题描述】
1、针对3亿数据量表进行列删除操作
CREATE TABLE sbtest1
(
id
int(11) NOT NULL AUTO_INCREMENT,
k
varchar(200) DEFAULT NULL,
c
char(120) NOT NULL DEFAULT ‘’,
pad
char(60) NOT NULL DEFAULT ‘’,
PRIMARY KEY (id
),
KEY k_1
(k
) BLOCK_SIZE 16384 LOCAL
) ORGANIZATION INDEX AUTO_INCREMENT = 300000001 AUTO_INCREMENT_MODE = ‘ORDER’ DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 ;
mysql> select count() from sbtest1;
±----------+
| count() |
±----------+
| 300000000 |
±----------+
1 row in set (0.02 sec)
mysql> set _force_parallel_ddl_dop = 16;
Query OK, 0 rows affected (0.00 sec)
mysql> alter table sbtest1 drop pad;
Query OK, 0 rows affected (0.37 sec)
检查数据列是否删除:
mysql> select * from sbtest1 limit 1;
±—±----------±--------------------------------------------------------------------+
| id | k | c |
±—±----------±--------------------------------------------------------------------+
| 1 | 167480658 | 50739423477-59896895752-91121550334-25071371310-03454727381-25307272676-12883025003-48844794346-97662793974-67443907837 |
±—±----------±--------------------------------------------------------------------+
1 row in set (0.01 sec)
查看表结构:
mysql> desc sbtest1;
±------±-------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------±-------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| k | varchar(200) | YES | MUL | NULL | |
| c | char(120) | NO | | | |
±------±-------------±-----±----±--------±---------------+
3 rows in set (0.01 sec)
mysql>
mysql> select table_name,tablet_id from __all_table where tablet_id=200011 and table_name=‘sbtest1’;
±-----------±----------+
| table_name | tablet_id |
±-----------±----------+
| sbtest1 | 200011 |
±-----------±----------+
1 row in set (0.01 sec)mysql>
mysql> select svr_ip,tablet_id,data_size/1024/1024/1024 from oceanbase.DBA_OB_TABLET_REPLICAS where tablet_id=200011;
±--------------±----------±-------------------------+
| svr_ip | tablet_id | data_size/1024/1024/1024 |
±--------------±----------±-------------------------+
| 10.186.63.162 | 200011 | 22.085485168732 |
| 10.186.63.26 | 200011 | 22.085485168732 |
| 10.186.63.42 | 200011 | 22.085485168732 |
±--------------±----------±-------------------------+
3 rows in set (0.02 sec)
当前疑问:
参考官方文档https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003980529列删除操作为offline ddl,不应该这么快完成吧?
测试修改列属性耗时数据:
mysql> set _force_parallel_ddl_dop = 16;
Query OK, 0 rows affected (0.01 sec)
mysql> alter table sbtest1 modify k int(11);
Query OK, 0 rows affected (25 min 39.20 sec)
mysql> select * from oceanbase.gv$session_longops\G
Empty set (0.02 sec)
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!