mysql怎么整理 mysql整理碎片

MySQL索引碎片整理查看碎片信息:
Index_length 代表索引的总量
Data_free 代表碎片数量
从information_schema中获取信息:
碎片整理:
过程时间长短取决于表大小和碎片多少,
返回结果optimize status OK则整理完成;
碎片整理过程会添加表级排他锁,需要找非繁忙期进行操作 。
MySQL 5.6 整理表的碎片 可以看到 , 当前表的碎片率超高了,50.6% 。
有三种办法整理碎片
这三种操作都是先创建一个临时表复制完成后再删除旧表 , 所以在执行操作的过程中磁盘会先增大 。
会锁表
会锁表
pt-online-schema-change- ALTER tables 无需锁表 。
整理结果很明显,整理后碎片率0.3% 。
这里有几个参数需要介绍一下:
--dry-run
这个参数不建立触发器,不拷贝数据,也不会替换原表 。只是创建和更改新表 。
--execute
表明你已经阅读了文档,并且确认要 alter the table 。你必须配置这个参数来 alter the table 。如果你不配置,那么工具将只进行一些安全检查然后就退出了 。这帮助确保你已经阅读了文档,并且了解如何使用该工具 。如果你没有阅读这些文档 , 那么不会设置该参数 。
--critical-load
每次chunk操作前后,会根据show global status统计指定的状态量的变化 , 默认是统计Thread_running 。目的是为了安全 , 防止原始表上的触发器引起负载过高 。这也是为了防止在线DDL对线上的影响 。超过设置的阀值 , 就会终止操作,在线DDL就会中断 。提示的异常如上报错信息 。
--max-lag
type: time; default: 1s
lag滞后偏移
暂停数据拷贝 , 直到所有replicas的lag值低于该值 。在每个 data-copy query (each chunk)后,工具会通过Seconds_Behind_Master查询所有replica的 replication lag。如果任何replica lag大于该值 , 那么工具会sleep--check-interval秒,然后再次检查所有replica 。如果你指定--check-slave-lag,那么工具会检查那台server,而不是所有server 。如果你想控制哪个提供工具的监控 , 配置DSN值--recursion-method。
工具会等待直到replicas停止lagging 。如果任一replica停止,工具会一直处于等待状态直到该replica启动 。在所有replicas运行并且lagging不大的情况下 , 数据拷贝继续 。
工具在等待的时候,会打印进程报告 。如果replica停止了,会立即打印进程报告 , 然后在每个进程报告期间重复 。
--check-interval
type: time; default: 1
Sleep time between checks for--max-lag.
--max-load
选项定义一个阀值,在每次chunk操作后,查看show global status状态值是否高于指定的阀值 。该参数接受一个mysql status状态变量以及一个阀值,如果没有给定阀值,则定义一个阀值为为高于当前值的20% 。注意这个参数不会像--critical-load终止操作,而只是暂停操作 。当status值低于阀值时 , 则继续往下操作 。是暂停还是终止操作这是--max-load和--critical-load的差别 。
--charset
简写: -A; type: string
设置默认字符集 。如果值为 utf8,设置 Perl’s binmode on STDOUT to utf8,传送 mysql_enable_utf8 参数到 DBD::mysql,然后在连接到MySQL后运行 SET NAMES UTF8。其他的值也是在STDOUT设置 binmode,然后在连到MySQL后运行 SET NAMES。
--check-replication-filters
检查复制中是否设置了过滤条件,如果设置了,程序将退出
--nocheck-replication-filters
不检查复制中是否设置了过滤条件
--set-vars
设置mysql的变量值
--check-slave-lag
检查主从延迟

推荐阅读