mysql表碎片怎么产生 ios14在哪查看耳机电量( 二 )


Extent Switches-扩展盘区开关数:该数应该等于扫描扩展盘区数减1 。高了则说明有外部碎片 。
Avg. Pages per Extent-每个扩展盘区上的平均页数:该数是扫描页数除以扫描扩展盘区数,一般是8 。小于8说明有外部碎片 。
Scan Density [Best Count:Actual Count]-扫描密度[最佳值:实际值]:DBCC SHOWCONTIG返回最有用的一个百分比 。这是扩展盘区的最佳值和实际值的比率 。该百分比应该尽可能靠近100% 。低了则说明有外部碎片 。
Logical Scan Fragmentation-逻辑扫描碎片:无序页的百分比 。该百分比应该在0%到10%之间,高了则说明有外部碎片 。
Extent Scan Fragmentation-扩展盘区扫描碎片:无序扩展盘区在扫描索引叶级页中所占的百分比 。该百分比应该是0%,高了则说明有外部碎片 。
Avg. Bytes Free per Page-每页上的平均可用字节数:所扫描的页上的平均可用字节数 。越高说明有内部碎片,不过在你用这个数字决定是否有内部碎片之前,应该考虑fill factor(填充因子) 。
Avg. Page Density (full)-平均页密度(完整):每页上的平均可用字节数的百分比的相反数 。低的百分比说明有内部碎片 。
MySQL—碎片整理删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种是数据碎片.实际上数据碎片分为两种,一种是单行数据碎片,另一种是多行数据碎片.前者的意思就是一行数据,被分成N个片段,存储在N个位置.后者的就是多行数据并未按照逻辑上的顺序排列.当有大量的删除和插入操作时,必然会产生很多未使用的空白空间,这些空间就是多出来的额外空间.索引也是文件数据,所以也会产生索引碎片,理由同上,大概就是顺序紊乱的问题.Engine 不同,OPTIMIZE 的操作也不一样的,MyISAM 因为索引和数据是分开的,所以 OPTIMIZE 可以整理数据文件,并重排索引 。这样不但会浪费空间,并且查询速度也更慢 。
查看碎片信息:
Index_length 代表索引的总量
Data_free 代表碎片数量
从information_schema中获取信息:
碎片整理:
过程时间长短取决于表大小和碎片多少,
返回结果optimize status OK则整理完成;
mysql如何找出碎片率最高的表//表名 为 top$top10 = array();$sql = "SELECT * FROM top ORDER BY nums DESC LIMIT 10";$res= mysql_query($sql);while($row = mysql_fetch_assoc($res)){ $top10[] = $row;}
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就会中断 。提示的异常如上报错信息 。

推荐阅读