首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go微服务精讲:Go-Zero全流程实战即时通讯(无密完结超清)

Go微服务精讲:Go-Zero全流程实战即时通讯(无密完结超清)

下载看水印

前面提到,ALGORITHM 可以指定 DDL 操作的算法,目前主要支持以下几种:

COPY 算法

INPLACE 算法

INSTANT 算法:MySQL 8.0.12 引入的新算法,目前只支持添加列等少量操作。它利用了 8.0 新的表结构设计,可以直接修改表的元数据,省去了重建原表的过程,从而极大地缩短了 DDL 语句的执行时间。对于其他类型的改表语句,默认使用 inplace 算法。关于 INSTANT 支持的场景可参考官方文档 [Online DDL Operations]:dev.mysql.com/doc/refman/…

DEFAULT:如果不指定 ALGORITHM,MySQL 会自行选择默认算法。它优先考虑 INSTANT,其次是 INPLACE,然后是 COPY。

以下是 MySQL 官网上给出的 Online DDL 对索引操作的支持情况:

OnlineDDL 的原理

以下是 Online DDL 的整体步骤,主要分为 Prepare 阶段、DDL 执行阶段以及 Commit 阶段。

Prepare 阶段

创建临时 frm 文件。

加 EXCLUSIVE-MDL 锁,阻止读写操作。

根据 ALTER 类型,确定执行方式(copy/online-rebuild/online-norebuild)。需要注意,如果使用 copy 算法,则不是 Online DDL。

更新数据字典的内存对象。

分配 row_log 对象,记录 Online DDL 过程中增量的 DML。

生成新的临时 idb 文件。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O1Z2WaDN0oTfr2pHutWZ9F6w0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券