如何安全的大数据量表在线进行DML操作

本文为博主原创,转载请注明出处

  随着业务的需要,工作中需要对生产数据库的一些表做一些DML操作,由于生产数据库表的数据量都是几千万,

而且生产数据库的表还在不断的进行新增和查询操作。应用中需要对生产数据库的表添加一个字段,由于考虑到数据量

大,而且表数据还在不断新增,以及进行查询等操作,为了不影响业务和数据,需要考虑在生产数据表添加字段时,不影响

正常业务,即不锁表也尽量减少性能的影响,所以通过不断查找,了解到使用以下的方式可以达到上面的效果,

ALGORITHM=INPLACE, LOCK=NONE;

  来解释下:

Algorithm=Inplace :可避免表拷贝导致的实例性能问题(空间、I/O问题),建议在 DDL 中包含该选项。

  如果 DDL 操作不支持 Algorithm=Inplace 方式,DDL 操作会立刻返回错误。

Lock=None :为了在 DDL 操作过程中不影响业务的 DML 操作,建议在 DDL 中包含该选项。

  如果 DDL 操作不支持 Lock=None (允许并行 DML 操作)选项,DDL  操作会立刻返回错误。

默认情况下 MySQL 会尽量使用 algorithm=inplace , lock=none 来进行 DDL 操作。因此默认可以不指定这两个选项。

为了保障期间,还是在ddl中加上了上面的两个配置,一张两千万的表加一个字段执行了8分钟,正常新增。

SQL语句如下:

ALTER TABLE `fucdn_customer_domain_flow12` ADD COLUMN `total` int(11) NOT NULL COMMENT '请求数', ALGORITHM=INPLACE, LOCK=NONE;

猜你喜欢

转载自www.cnblogs.com/zjdxr-up/p/12141852.html