首页 > 数据库 >Mysql 大表在线DDL修改表全文索引解决方式

Mysql 大表在线DDL修改表全文索引解决方式

时间:2022-08-27 20:12:26浏览次数:85  
标签:选项 Algorithm Mysql 全文索引 Inplace DDL table 操作

1.添加主键索引

ALTER TABLE table_name ADD PRIMARY KEY (column) ,Algorithm=Inplace ;

2.添加唯一索引

ALTER TABLE table_name ADD UNIQUE (column) ,Algorithm=Inplace ;

3.添加全文索引

ALTER TABLE table_name ADD FULLTEXT (column),Algorithm=Inplace ;

4.添加普通索引

ALTER TABLE table_name ADD KEY table_cloum(table_cloum) USING BTREE,Algorithm=Inplace ;

5.添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column1, column2, column3),Algorithm=Inplace ;

在线DDL修改生产环境的大表一直是运维、DBA一个很头痛的问题

客户群里面反馈系统无法做写跟进了,于是赶紧排查数据库是不是出现锁表现象了

经查询果然是alter在新增全文索引的时候长时间不释放,导致出现大量的DML锁,最后kill掉这个进程恢复业务,

然后在阿里云的帮助上找到了一个解决方法

  • In-Place?:对应 DDL语句的 Algorithm 选项,通过 inplace 方式执行 DDL。相比表拷贝方式,可以减少空间和 I/O 消耗。
  • Copies Table?:对应 DDL语句的 Algorithm 选项,通过 表拷贝 方式执行 DDL。DDL 执行期间会占用更大的磁盘空间和消耗更多的 I/O。
  • 允许并发 DML?:对应 DDL语句的 Lock 选项,DDL 执行期间是否支持并发 DML 操作。
  • 允许并发查询?:DDL 语句执行期间是否支持并发查询操作(通常都是支持的)。
  • MySQL官方文档请参考: Online DDL 概览
  • DDL 操作执行时需要修改表的元数据(metadata),有可能会遇到等待表元数据锁的情况(waiting for table metadata lock),该情况的处理方式请参考: RDS MySQL 表上 Metadata lock 的产生和处理
  • Inplace 和 Copy Table 是相反的 2 种处理方式;但即使 DDL 支持 Inplace 选项,某些操作在整个执行过程中也会部分涉及到表拷贝,比如上表中的添加列操作。

2. Online DDL 建议的选项

  • Algorithm=Inplace :为了避免表拷贝导致的实例性能问题(空间、I/O问题),建议在 DDL 中包含该选项。如果 DDL 操作不支持 Algorithm=Inplace 方式,DDL 操作会立刻返回错误。
- 修改字段数据类型不支持 algorithm=inplace 选项
alter table area_bak algorithm=inplace, modify father text;1.2.
  • Lock=None :为了在 DDL 操作过程中不影响业务的 DML 操作,建议在 DDL 中包含该选项。如果 DDL 操作不支持 Lock=None (允许并行 DML 操作)选项,DDL 操作会立刻返回错误。
-- 转换字符集不支持并发 DML 操作
   alter table area ALGORITHM=copy, lock=none,CONVERT TO CHARACTER SET utf8mb4;1.2.

默认情况下 MySQL 会尽量使用 algorithm=inplace , lock=none 来进行 DDL 操作。因此默认可以不指定这两个选项。
对不支持 Online DDL 的操作(比如RDS for MySQL 5.5),可以考虑通过 Percona 的 Schema Online Change 工具来操作,请参考: RDS for MySQL 如何使用 Percona Toolkit

一个1000万条数据新增一个索引 大概需要20分钟左右
转载至: 阿里云RDS帮助

标签:选项,Algorithm,Mysql,全文索引,Inplace,DDL,table,操作
From: https://www.cnblogs.com/hypj/p/16631348.html

相关文章

  • MySQL InnoDB索引原理
     数据库与I/O原理数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数据......
  • MySQL源码分析之SQL函数执行
    1.MySQL中执行一条SQL的总体流程2.SQL函数执行过程1.MySQL中执行一条SQL的总体流程一条包含函数的SQL语句,在mysql中会经过:客户端发送,服务器连接,语法解析,语句执行的......
  • 【MySQL】MySQL8确认哪些参数在使用以及来源
    在MySQL8中,参数可能来自不同的地方,确认有效的参数来自于哪里:SELECT variable_name, variable_sourceASsource, variable_path, set_time, set_userASUSER, set......
  • 【MySQL】MySQL8持久化系统变量
    set命令可以用于将某些全局系统变量持久化到数据目录中的mysqld-auto.cnf文件中,以影响后续启动的服务器操作。resetpersist从mysqld-auto.cnf中删除持久设置。在运行时持......
  • mysql在Linux与widows安装
    一、mysql的安装之前搭建linux下项目的发布,最后遗留的问题时数据库的迁移,如何从windows上迁移到linux上?这里首先进行mysql数据库的安装1、下载mysql安装包在这里下载的......
  • koa连接mysql数据库
    app.js中的代码:constKoa=require('koa2');constapp=newKoa();constport=5050;constRouter=require('koa-router');constrouter=newRouter();cons......
  • Mysql 常用命令
    大纲命令执行事务STARTTRANSACTION;//开启事务UPDATE`Users`SETAccountId=0WHEREAccountIdisnullCOMMIT;//提交ROLLBACK;//回滚常见问题Q1.允......
  • mysql逻辑结构,存储结构
    宏观:库,存储在操作系统目录中表:  微观:段区页一个表就是一个段,mysql分配空间时至少分配一个区,每个区默认时1M(64个page页),mysql最小的IO单元就是PAGE(16KB) ......
  • mysql常用操作汇总
    工作中经常用会遇到这种情况,可以访问mysql所在的服务器,但是服务器端口不对外暴露(通常因为安全原因)。这时,操作数据库只能通过命令行和mysqlclient窗口来实现。我对这些操作......
  • mysql执行时的sql_mode设置
    查询当前MySQL的模式:select@@sql_mode;  根据需要设置模式,这里是将ONLY_FULL_GROUP_BY去掉:SETSESSIONsql_mode=(SELECTREPLACE(@@sql_mode,'ONLY_FULL_GROUP......