mysql磁盘碎片整理

news/2024/10/11 18:25:41

背景

数据结转过程中经常进行 delete 操作,产生空白空间,如果进行新的插入操作,MySQL将尝试利用这些留空的区域,但仍然无法将其彻底占用,于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,久而久之就产生了碎片。

碎片治理思路

根据线上处理经验总结比对4种处理磁盘碎片优缺点

 

  优势 缺点 备注
将数据量巨大的表设计成分区表,按时间分区 通过结转分区数据,删除分区释放磁盘碎片,磁盘IO抖动秒级别,对线上业务影响小   估算数据量,每个分区不超过3亿数据350G为佳;库存流水,订单表这些表应该在创建时就应该设计成分区表,避免以后磁盘碎片痛点
重建表存储引擎,重新组织数据(ALTER TABLE tablename ENGINE=InnoDB;)   整理过程加锁,周期长,且对线上业务影响较大:10亿数据量,1000G,tp99会持续超过60s 谨慎操作
主从切换(DBA可使用一个磁盘更大的干净的库,进行主从切换)   涉及面广,牵扯范围较大,处理时长在分钟级 谨慎操作
创建临时表进行数据双写最后进行数据库表名切换 零延迟,无抖动,对线上无任何影响 需要磁盘空间较大  

 

创建分区表

 


 

上述分区表,在某一分区内数据结转完成后,

ALTER TABLE warehouse_stock_flow drop PARTITION p24;

当然不是所有的表都是可以创建分区表的。如果某一张数据表在很长一段时间内没有进行数据结转,且无法创建分区表的话,可以利用以下方法。

 

表名切换

如果某一张数据表在很长一段时间内没有进行数据结转,可以创建临时表,通过大数据将某一结转周期内数据推送至临时表,在代码层面进行数据的双写,最后再通过表名更换的方式进行表名转换。其实,治理磁盘碎片最好的方法就是删除表,不同业务对数据的要求不同。如果有可能的话新建一个临时表。

利用rename语句对数据库表信息进行修改,不会锁表,可以达到零延迟,无抖动,对线上无任何影响。

 


 

rename table xx_record to xx_record_temp1,xx_temp to xx_record,xx_record_temp1 to xx_record_temp;

总结

不管是使用云还是商城数据库,只要使用mysql,必然会遇到Mysql碎片问题痛点,数据量大的业务表应该设计成分区表方便磁盘碎片整理,降低维护成本和业务影响。碎片清理前后,IO性能会上升,SQL执行效率更快。所以,在日常运维工作中,应对碎片进行定期清理,保证数据库有稳定的性能和充足的空间。

扩展

提到提高IO性能,在紧急情况下还可以考虑开启刷盘(设置 sync_binlog=0;innodb_flush_log_at_trx_commit=0),但开启刷盘会有数据丢失风险(集团数据库模板配置参数默认sync_binlog=1;innodb_flush_log_at_trx_commit=1)。

附件

mysql数据库核心参数介绍:https://www.cnblogs.com/klvchen/p/10861850.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/53490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud】idea如何实现微服务多开

实现微服务多开背景:当需要使用相同的配置启动多个服务且host相同时,就需要在命令行指定不同的端口,但是 spring cloud 中远程配置默认会覆盖所有本地参数,所以需要修改默认覆盖优先级 一、默认优先级 二、配置远程配置优先级低于本地系统参数 # 是否允许本地配置覆盖远程配…

[ARC175E] Three View Drawing

构造My Blogs [ARC175E] Three View Drawing 哎,构造。 首先考虑 \(m=n^2\) 怎么做:显然是最上面一层填满第一条主对角线,第二层填满第二条主对角线...(主对角线指可以循环的对角线)。 把 \(n\) 变成满足 \(n^2\geq m\) 的最小的 \(n\)。然后考虑删去 \(n^2-m\) 个。可以发…

c/c++代码流程图生成

以下介绍2款皆免费 1.cxx2flow【github项目】c/c++函数解析为dot然后通过Graphviz渲染项目有附带gui程序可直接生成流程图,但是显示效果缩放不太行,建议解析生成dot后喂给其他基于Graphviz的渲染服务,使用过vscode上面的graphviz-interactive-preview,效果还行,也有在线网页…

算法与数据结构——哈希表

哈希表 哈希表(hash table),又称散列表,它通过建立键key与值value之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key,则可以在O(1)时间内获取对应的值value。 除哈希表外,数组和链表也可以实现查询功能,他们的效率对比如下表:添加元素:仅需将元…

Android systrace环境的搭建和使用

一、systrace简介 Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,…

threeJs 修改TransformControls的显示位置

有的时候模型的原点不是自身中心而是在场景的[0, 0, 0]位置这个时候想要让TransformControls的位置显示在模型的中心目前找的的处理方式是修改源码 找到updateMatrixWorld方法 updateMatrixWorld () {...for ( let i = 0; i < handles.length; i ++ ) {...if ( this.mode ==…

对于初创电商公司来说,选择API测试工具时应该考虑哪些因素?

成本效益: 初创公司通常预算有限,因此需要考虑工具的购买成本或订阅费用。 寻找提供免费版本或社区版的工具,这些版本可能已经满足基本需求。 易用性: 选择学习曲线较低的工具,以便团队成员可以快速上手。 界面友好和直观的工具可以减少培训时间和成本。 功能性: 确保所选…

confluence

我是有postgres 的文件了 所以我需要重新创建个容器docker run -itd -p 8090:8090 \--name confluence \-e JVM_MINIMUM_MEMORY=4096m \-e JVM_MAXIMUM_MEMORY=4096m \-v /data/confluence:/opt/atlassian/confluence-data \confluence:8.7.1一、部署confluence和postgresql 下…