当前位置: 代码迷 >> 综合 >> optimize table、analyze table、alter table、gh-ost
  详细解决方案

optimize table、analyze table、alter table、gh-ost

热度:83   发布时间:2024-01-05 02:36:23.0

MySQL系列

第一章:sql_mode模式
第二章:optimize table、analyze table、alter table、gh-ost

文章目录

  • MySQL系列
  • 一、alter table
  • 二、analyze table
  • 三、optimize table
  • 四、gh-ost


一、alter table

从 MySQL 5.6 版本开始,alter table t engine = InnoDB(也就是 recreate)默认流程如下所示:
altertable

  1. 建立一个临时文件,扫描表 A 主键的所有数据页;
  2. 用数据页中表 A 的记录生成 B+ 树,存储到临时文件中;
  3. 生成临时文件的过程中,将所有对 A 的操作记录在一个日志文件(row log)中,对应的是图中 state2 的状态;
  4. 临时文件生成后,将日志文件中的操作应用到临时文件,得到一个逻辑数据上与表 A 相同的数据文件,对应的就是图中 state3 的状态;用临时文件替换表 A 的数据文件。

二、analyze table

analyze table t 其实不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了 MDL 读锁

三、optimize table

optimize table t 等于 recreate+analyze

四、gh-ost

gh-ost

  1. gh-ost 首先连接到主库上,根据 alter 语句创建幽灵表,
  2. 然后作为一个备库连接到其中一个真正的备库或者主库上(根据具体的参数来定),一边在主库上拷贝已有的数据到幽灵表,一边从备库上拉取增量数据的 binlog,然后不断的把 binlog 应用回主库。
  3. 等待全部数据同步完成,进行 cut-over 幽灵表和原表切换。图中 cut-over 是最后一步,锁住主库的源表,等待 binlog 应用完毕,然后替换 gh-ost 表为源表。gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。
  相关解决方案