建议offline DDL增加增量同步能力,减少锁表时间

问题背景

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479781
offline ddl是通过重建表的形式做的(table_id会变)。 Offline DDL 执行期间不允许DML,这对生产的稳定性是一个极大的挑战。
mysql可以通过pt-online-schema-change 或gh-ost做增量同步以及新旧表切换,以规避相似问题。

建议

  1. 针对offline-ddl,参考 pt或gh-ost,增加增量同步以及切换的能力,减少锁表时间。
  2. 可以由参数控制是否开启这个功能
5 个赞

支持一下

4 个赞

OceanBase 数据库 V4.x 版本 MySQL 模式下所支持的 Online DDL 操作如下表所示

OceanBase 数据库 V4.x 版本 Oracle 模式下所支持的 Online DDL 操作如下表所示。

访问文档链接了解Online版本详情

3 个赞

支持支持

2 个赞

支持

3 个赞

可以按照楼上发的 了解一下offline模式 目前产品行为 应该是这样的

3 个赞

我理解你想表达的是当前产品已经具备了我建议的功能 ?

但实际上不是的。

  1. 官网也没有说支持,明确说有影响,如下:

  2. 实测试也是一样的。

测试方法:
在sysbenc压测期间,执行offline ddl ,观察影响 
sysbench --db-driver=mysql --threads=1 --time=6000000 --mysql-host=1xxx --mysql-port=2883 --mysql-user='xxxx' --mysql-password='xx' --report-interval=1  --tables=1 /usr/share/sysbench/oltp
_read_write.lua run 

测试了以下offline DDL。实测DDL执行多久就会影响多久
mysql> alter table sbtest1 add column (c1 int generated always as (k+1) stored);
mysql> alter table sbtest1 drop primary key;
mysql> alter table sbtest1 add primary key(id);
mysql> alter table sbtest1 add column group(each column);


影响观察(部分日志):
[ 1084s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1085s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1086s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1087s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1088s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1089s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1090s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1091s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1092s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1093s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1094s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1095s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1096s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1097s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1098s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1099s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1100s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1101s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1102s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1103s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1104s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1105s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1106s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1107s ] thds: 1 tps: 0.00 qps: 15.00 (r/w/o: 14.00/0.00/1.00) lat (ms,95%): 0.00 err/s: 1.00 reconn/s: 0.00
[ 1108s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1109s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1110s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1111s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1112s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1113s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1114s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 1115s ] thds: 1 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

DDL执行完成后恢复
[ 1116s ] thds: 1 tps: 2.00 qps: 43.01 (r/w/o: 28.00/11.00/4.00) lat (ms,95%): 100000.00 err/s: 0.00 reconn/s: 0.00
[ 1117s ] thds: 1 tps: 14.00 qps: 276.99 (r/w/o: 195.99/53.00/28.00) lat (ms,95%): 74.46 err/s: 0.00 reconn/s: 0.00
[ 1118s ] thds: 1 tps: 14.00 qps: 276.03 (r/w/o: 192.02/56.01/28.00) lat (ms,95%): 77.19 err/s: 0.00 reconn/s: 0.00
[ 1119s ] thds: 1 tps: 14.00 qps: 270.00 (r/w/o: 186.00/56.00/28.00) lat (ms,95%): 81.48 err/s: 0.00 reconn/s: 0.00
[ 1120s ] thds: 1 tps: 13.00 qps: 277.00 (r/w/o: 196.00/55.00/26.00) lat (ms,95%): 73.13 err/s: 0.00 reconn/s: 0.00
[ 1121s ] thds: 1 tps: 14.00 qps: 271.95 (r/w/o: 190.97/52.99/28.00) lat (ms,95%): 78.60 err/s: 0.00 reconn/s: 0.00


2 个赞

DDL长时间锁表,对于做甲方运维的DBA是非常痛苦,很容易背锅的一件事,希望官方能重视,谢谢!

2 个赞

收到你的反馈 我们也会反馈给相关的同学

3 个赞

羡慕你们能用ob产品

2 个赞

无论哪种库有些DDL都只能Offline、有些Online可以支持、如测试里的删除重加主键确实只能Offline的,第3方工具ptosc基于触发器可以直接在测试环境验证MySQL租户、ghost基于binlog要确认MySQL租户开启了binlog_mode模式在测试。
很好的建议,如果MySQL租户模式能完美兼容以上2个工具就更符合社群用户的经验了;当然能够在租户类型标准之外工具箱式集成这个能力、尤其还能预估幽灵表的空间大小需求就更完美了。

1 个赞