Mysql中删除数据造成的碎片如何修复我们都知道 , 在mysql (这里只探讨innodb) 中delete数据,并非真实删除,而是在这行数据上打了一个del的标记,所以这行占用的空间也并不会释放 , 但是空间可以被复用,所以期望用delete数据来释放空间的同学可以醒醒了 。这样就造成了空间上的碎片 , 那么如果干掉这些碎片呢 。
这里先说结论,alter table语句可以触发表重建 , 消除碎片空间 。
mysql中的数据存储结构大概是下面这个样子的
而delete掉的标记会记录在头信息中 。
做个实验,看看空间是否真的没有释放;
创建一张表user , 并插入很多数据
查看表的文件大小
再随便插入几条
ok这里看到文件大小增加了16k,这是因为mysql的一页就是16k , 所以文件大小是16k、16k的增长的 。
这时候我们删除大量的数据再次查看文件大?。匀皇?72k , 索命,数据虽然删除 , 但是空间没有释放 。
【mysql表碎片怎么产生 ios14在哪查看耳机电量】 这里我们对主键执行一个alter table语句
再次查看文件大小
ok 文件大小明显的减少,这里说明主键的alter语句会重建表,并且释放碎片空间;
这时候我们再删除大量的数据再次查看文件大小,这里我们对普通列执行一个alter table语句
再次查看文件大小
ok 文件大小明显的减少 , 这里说明普通列的alter语句会重建表 , 并且释放碎片空间;
MySQL索引碎片整理查看碎片信息:
Index_length 代表索引的总量
Data_free 代表碎片数量
从information_schema中获取信息:
碎片整理:
过程时间长短取决于表大小和碎片多少,
返回结果optimize status OK则整理完成;
碎片整理过程会添加表级排他锁,需要找非繁忙期进行操作 。
php怎么显示mysql数据库的碎片php是无法显示mysql数据库的碎片的 。
原因如下:
1、当索引所在页面的基于主关键字的逻辑顺序 , 和数据文件中的物理顺序不匹配时,碎片就产生了 。所有的叶级页包含了指向前一个和后一个页的指针 。这样就形成一个双链表 。理想情况下 , 数据文件中页的物理顺序会和逻辑顺序匹配 。整个磁盘的工作性能在物理顺序匹配逻辑顺序时将显著提升 。对某些特定的查询而言,这将带来极佳的性能 。当物理排序和逻辑排序不匹配时,磁盘的工作性能会变得低效,这是因为磁头必须向前和向后移动来查找索引,而不是只象某个单一方向来搜索 。
2、碎片会影响I/O性能,不过对于位于SQL Server数据缓冲内的数据页而言,碎片并不会带来任何影响 。
3、在索引碎片整理前,请确保系统资源的一些问题,比如物理磁盘碎片,不合理的基础结构等因素会给性能带来负面影响,参看KB935089:使用 Defrag 管理器可以 such as Exchange Server 或 SQL Server 数据库服务器的卷进行碎片整理 。
DBCC SHOWCONTIG是显示指定的表的数据和索引的碎片信息 。当运行该命令时,要特别注意逻辑碎片(Logical Fragmentation)和页密度(Page Density)两个指标 。
Page Scanned-扫描页数:如果你知道行的近似尺寸和表或索引里的行数,那么你可以估计出索引里的页数 。看看扫描页数,如果明显比你估计的页数要高,说明存在内部碎片 。
4、Extents Scanned-扫描扩展盘区数:用扫描页数除以8,四舍五入到下一个最高值 。该值应该和DBCC SHOWCONTIG返回的扫描扩展盘区数一致 。如果DBCC SHOWCONTIG返回的数高 , 说明存在外部碎片 。碎片的严重程度依赖于刚才显示的值比估计值高多少 。
推荐阅读
- 抖音直播伴侣帧率,抖音直播伴侣帧率低怎么弄
- sqlserver编辑前200行,sqlserver编辑前200行红色感叹号
- 游戏仿真模拟器封面,游戏仿真模拟器封面怎么设置
- python调用r函数 python函数调用函数代码
- 茂名应急管理局公众号关注,陕西应急管理局公众号
- 作文网络游戏300字,网络游戏作文200字
- 电视全面屏什么,电视全面屏的好处
- mysql多表怎么关联 mysql怎么多表联查
- jquery表格tree,jquery表格筛选