0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

mysql磁盘碎片整理

京东云 来源:jf_75140285 作者:jf_75140285 2024-08-27 15:26 次阅读

背景

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

碎片治理思路

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



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



创建分区表

wKgaombNf52AKKGpABCZGfhqC9I055.png

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

ALTER TABLE warehouse_stock_flow drop PARTITION p24;

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



表名切换

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

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

wKgZombNf56AMgbUAAQwDHqV6Cg590.png

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3860

    浏览量

    64850
  • 磁盘碎片整理

    关注

    0

    文章

    2

    浏览量

    5523
  • MySQL
    +关注

    关注

    1

    文章

    833

    浏览量

    26818
收藏 人收藏

    相关推荐

    VMWare Linux系统磁盘扩容

    当我们在VMware Linux虚拟机安装软件的时候,发现磁盘不够了,可以考虑给磁盘扩容,而不是重建虚拟机。
    的头像 发表于 02-17 14:01 144次阅读
    VMWare Linux系统<b class='flag-5'>磁盘</b>扩容

    使用插件将Excel连接到MySQL/MariaDB

    使用插件将 Excel 连接到 MySQL/MariaDB 适用于 MySQL 的 Devart Excel 插件允许您将 Microsoft Excel 连接到 MySQL 或 MariaDB
    的头像 发表于 01-20 12:38 195次阅读
    使用插件将Excel连接到<b class='flag-5'>MySQL</b>/MariaDB

    MySQL数据库的安装

    MySQL数据库的安装 【一】各种数据库的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介绍
    的头像 发表于 01-14 11:25 175次阅读
    <b class='flag-5'>MySQL</b>数据库的安装

    什么是raid磁盘冗余阵列

    什么是raid 磁盘冗余阵列 这是由多块独立磁盘(多为硬盘)组合的一个超大容量磁盘组。   大白话的解释磁盘冗余阵列,就是将很多块硬盘组合成一个整体,不同的RAID级别,可以实现不同的
    的头像 发表于 12-16 16:41 341次阅读
    什么是raid<b class='flag-5'>磁盘</b>冗余阵列

    MySQL还能跟上PostgreSQL的步伐吗

    Percona 的老板 Peter Zaitsev最近发表一篇博客,讨论了MySQL是否还能跟上PostgreSQL的脚步。Percona 作为MySQL 生态扛旗者,Percona 开发了知名
    的头像 发表于 11-18 10:16 303次阅读
    <b class='flag-5'>MySQL</b>还能跟上PostgreSQL的步伐吗

    详解MySQL多实例部署

    详解MySQL多实例部署
    的头像 发表于 11-11 11:10 363次阅读

    MySQL编码机制原理

    前言 一位读者在本地部署 MySQL 测试环境时碰到一个问题,我觉得挺有代表性的,所以写篇文章介绍一下,看完相信你会对 MySQL 的编码机制有最本质的了解,本文的目录结构如下 读者问题简介
    的头像 发表于 11-09 11:01 323次阅读

    适用于MySQL的dbForge架构比较

    dbForge Schema Compare for MySQL 是一种工具,用于轻松有效地比较和部署 MySQL 数据库结构和脚本文件夹差异。该工具提供了 MySQL 数据库架构中所有差异的全面视图。
    的头像 发表于 10-28 09:41 292次阅读
    适用于<b class='flag-5'>MySQL</b>的dbForge架构比较

    配置MySQL主从复制和读写分离

    配置MySQL主从复制和读写分离
    的头像 发表于 10-23 11:44 565次阅读
    配置<b class='flag-5'>MySQL</b>主从复制和读写分离

    Jtti:MySQL初始化操作如何设置root密码

    MySQL初始化时,可以通过以下步骤设置root密码: 打开命令行工具,使用以下命令启动MySQL服务:   sudo service mysql start   使用以下命令登录MySQL
    的头像 发表于 08-08 16:45 497次阅读

    Linux磁盘IO详细解析

      在讲解磁盘IO前,先简单说下什么是磁盘磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态
    的头像 发表于 08-05 15:49 749次阅读
    Linux<b class='flag-5'>磁盘</b>IO详细解析

    MySQL知识点汇总

    大家好,这部分被称为DQL部分,是每个学习MySQL必须要学会的部分,下面就让我来介绍MySQL中的其他部分。
    的头像 发表于 08-05 15:27 480次阅读
    <b class='flag-5'>MySQL</b>知识点汇总

    华纳云:如何修改MySQL的默认端口

    MySQL是世界上最流行的开源关系型数据库管理系统之一。在某些情况下,由于安全性、网络策略或端口冲突的原因,数据库管理员可能需要更改MySQL服务的默认监听端口。本文将指导您如何在不同的操作系统上
    的头像 发表于 07-22 14:56 364次阅读
    华纳云:如何修改<b class='flag-5'>MySQL</b>的默认端口

    MySQL的整体逻辑架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心
    的头像 发表于 04-30 11:14 522次阅读
    <b class='flag-5'>MySQL</b>的整体逻辑架构

    MySQL忘记root密码解决方案

    mysql登录密码为password()算法加密,解密成本太高,以下为通用方案; 原理:mysql提供了特殊启动方式,即跳过权限表验证,启动后,登录不需要提供密码; 登录后,即可修改mysql数据库的user表,重置
    的头像 发表于 04-23 16:08 794次阅读