MySQL—碎片整理删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成mysql碎片怎么弄了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种是数据碎片.实际上数据碎片分为两种,一种是单行数据碎片,另一种是多行数据碎片.前者的意思就是一行数据,被分成N个片段,存储在N个位置.后者的就是多行数据并未按照逻辑上的顺序排列.当有大量的删除和插入操作时,必然会产生很多未使用的空白空间,这些空间就是多出来的额外空间.索引也是文件数据,所以也会产生索引碎片,理由同上,大概就是顺序紊乱的问题.Engine 不同,OPTIMIZE 的操作也不一样的,MyISAM 因为索引和数据是分开的,所以 OPTIMIZE 可以整理数据文件,并重排索引 。这样不但会浪费空间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
检查主从延迟
--no-version-check
不检查版本,在阿里云服务器中一般加入此参数,否则会报错
MySQL索引碎片整理查看碎片信息:
Index_length 代表索引的总量
Data_free 代表碎片数量
从information_schema中获取信息:
碎片整理:
过程时间长短取决于表大小和碎片多少,
返回结果optimize status OK则整理完成;
碎片整理过程会添加表级排他锁,需要找非繁忙期进行操作 。
【mysql碎片怎么弄 人都是视觉动物吗】关于mysql碎片怎么弄和人都是视觉动物吗的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 百丽国际总部直播带货,百丽国际是什么平台
- 旅行小程序怎么制作的图片的简单介绍
- 打印机转pdf格式,打印转换pdf文件
- caa转pdf,caj转pdf在线转换器
- php向数组追加数据 php给数组赋值
- 安卓飞机模拟游戏推荐,安卓手机飞机游戏
- 手机小游戏在桌面如何删除,手机里的小游戏怎么删除
- 直播主页推广话术,直播推广技巧
- 形象解说java代码 形象性解说是什么意思