MySQL|空间碎片化问题处理
一、空间碎片化严重案例分享
1.1 问题描述
实例磁盘空间近1个月上涨趋势明显,主要是个别日志表存储较大且部分表存在空间碎片化的现象。
1.2 处理流程
1、通过日常巡检以及监控发现某实例磁盘空间近1月上涨趋势明显
2、在询问业务方是否为正常的业务增长外,查看该实例top表空间的表,排查是否存在异常较大的表
1)查看数据存储量较大的schema
SELECT table_Schema , round(SUM((DATA_LENGTH + INDEX_LENGTH + DATA_FREE) / 1024 / 1024), 2) AS Total_Size FROM tables GROUP BY table_schema ORDER BY Total_Size DESC;
2)查看具体schema下top表的空间使用情况
SELECT table_schema, table_name , round(DATA_LENGTH / 1024 / 1024, 2) AS Data_Size , round(INDEX_LENGTH / 1024 / 1024, 2) AS Index_Size , round(DATA_FREE / 1024 / 1024, 2) AS Free_Size FROM tables WHERE table_schema = 'db_rim' ORDER BY Data_Size DESC LIMIT 10;
3、从以上截图中我们可以得到信息:db_rim库库下,rim_user_msg_log表的数据量很大,可查看是否可对该表中无效的数据进行清理?rim_user_msg_analyse这张表的碎片化将尽17G,可考虑对这些碎片化空间进行回收
4、最终采取的处理方法为:rim_user_msg_log表直接清空,rim_user_msg_analyse进行碎片化回收
1)清理前
2)清理后
3)实例磁盘空间使用趋势
二、表数据量过大清理案例
2.1 问题描述
通过对TOP表数据量的监控,我们可以看到sys_rest_server_log的数据量已经达到7000w,除空间占用外,我们更关注的是该表对数据库带来的性能隐患。若业务上或者人为不当的查询该表数据,其操作的资源消耗在一定程度上一定会对正常业务造成影响。
2.2 问题处理
1、该表当前的表现主要有两点,一点是某瞬时写入量极大,另外一点是表日增可达到300w记录数。对于数据库而言这种表行为或业务设计是不合理的,我们需要搞清楚该表究竟是用来记录哪些信息,业务设计是否合理?
通过观察表数据以及与相关开发人员沟通,我们得知该表会记录应用端所有的接口调用信息,我们所观察到的数据增长尖峰也正是由于业务量上涨而导致该表瞬间并发写入大量日志信息。
2、对于这种大数据量的日志记录信息,建议最好使用ELK这种日志分析服务,而不是使用数据库进行存储
3、限于开发人员开发能力有限,无法改造业务架构。针对该表日增长、瞬间增长都极大的情况,我们与开发人员沟通该表记录的数据是否可从源端上进行减少。只记录重要信息、非重要信息的接口日志入库进行屏蔽
4、确定表数据记录可从最根本减产后,我们仍需要对目前7000w的数据进行处理,将历史无效数据进行清理,并制定合适的数据清理策略
5、无效历史数据清理/数据清理策略
1、创建备份表: create table sys_rest_server_log_bak_0228_1 like sys_rest_server_log;
2、表名替换 将源表sys_rest_server_log重命名为备份表,备份表sys_rest_server_log_bak_0208_1重命名为源表sys_rest_server_log,业务数据会写入空的新表,但是在rename期间这部分业务日志写入会失败【需关注】 rename table sys_rest_server_log to sys_rest_server_log_bak_0228_2,sys_rest_server_log_bak_0228_1 to sys_rest_server_log;
3、将备份表sys_rest_server_log_bak_0208_2中的仍然需要的数据重新写入到sys_rest_server_log,分批次写入,sys_rest_server_log保留近15天数据。程序上可保证主键fd_id唯一,避免主键冲突。 insert into sys_rest_server_log select * from sys_rest_server_log_bak_0228_2 where fd_start_time between 'xxx' and 'xxx';
4、调整平台数据清理策略,将服务运行日志备份天数改为15天,清除服务运行日志备份天数改为30天
5、sys_rest_server_log_bak_0228_2表保留80+天记录数据,暂时可以不做清理,等程序维护的sys_rest_server_log_backup有完备的数据后,将sys_rest_server_log_bak_0228_2表清除;
三、总结归纳
2.1 如何判断表碎片化问题是否严重
表数据的频繁更新容易对表空间造成一定的碎片化,我们可以通过information_schema.table表中的data_free字段判断该表碎片化是否严重。
2.2 如何处理碎片化问题
optimize table tableName; alter table tablName engine=innodb;
2.3 大表历史数据清楚过程中的关注点
1、通过创建bak表与源表进行rename替换,rename期间会造成业务对该表数据写入失败
2、bak表创建的时需关注primayr key
1)程序上保证主键唯一可不需要关注
2)若主键使用自增长,建议在创建bak表创建时提高当前的auto_increment指,空余一部分buffer空间,保证后续将源表历史数据写入rename后的新表时主键不冲突
3、对于此类经常需要进行数据清理的表,建议使用分区表进行存储,后续对数据的处理仅仅需要删除指定分区
更多技术信息请查看云掣官网https://www.dtstack.com/dtsmart/
MySQL|空间碎片化问题处理的更多相关文章
- 检查mysql表碎片化脚本
#!/bin/sh echo -n "MySQL username: " ; read username echo -n "MySQL password: " ...
- MySQL 清除表空间碎片
碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大; (2)当执行插入操作 ...
- 浅析MySQL数据碎片的产生(data free)
浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...
- 计算机内存碎片(中)——外部碎片化(内存 & 文件系统 & 数据库系统通杀)
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/17252221 外部碎片化 当计算机内存被划分成很细碎 ...
- Android从开源到碎片化 开发者叛离的真相
Android从诞生开始就受到热捧,并日益普及.它有别于以往的手机及移动终端操作系统,其独具的开源性.系统廉价性和提供给第三方大自由度的创新空间,以及不受硬件约束的优势,获得了广大开放社群的支持.但是 ...
- MySQL表碎片整理
MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...
- 巨杉Talk | 拒绝数据碎片化,原生分布式数据库灵活应对数据管理需求
2019年7月19-20日,以“运筹帷幄,数揽未来”为主题的DAMS中国数据智能管理峰会在上海青浦区成功举办.在DAMS峰会上,巨杉数据库为大家带来了题为“云架构下的分布式数据库设计与实践”的主题分享 ...
- 漫谈碎片化学习(Fragmentation learning)
碎片化学习(Fragmentation Learning) 从一个互联网小段子讲起: 某天,美国情报部门FBI应奥巴马的要求,做相关汇报:“报告总统,经FBI分析,中国‘短信’中35%是节日祝福语,2 ...
- RDS MySQL 空间问题的原因和解决
来源:https://help.aliyun.com/knowledge_detail/41739.html RDS MySQL 空间问题的原因和解决 更新时间:2016-07-22 17:20:14 ...
- [No000034]知乎-长期接收碎片化知识有什么弊端?
你所接受的一切信息,构成了你的思维方式. 所以,长期接受碎片信息的后果,就是让你的思维变得狭隘,难以进行复杂的思考. 碎片信息通常具备这样的特征: •它们往往是一些事实的集合而非逻辑 •它们往往大量简 ...
随机推荐
- JavaScript中的浅拷贝与深拷贝
前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用.在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果. 浅拷贝是创 ...
- 记录 Ucharts 的使用
1.开启 2d 渲染 线上运行开启 canvas2d 可以解决图表显示问题 <qiun-data-charts canvas2d .../> canvasId 可以不传,官方内置生成随机字 ...
- 其它-Supervisor的使用
文章目录 Supervisor 的使用 一 Supervisor介绍 二 安装 2.1 安装方式 2.2 验证 2.3 配置 2.4 配置详情(了解) 2.5 启动.停止.重启 三 program 配 ...
- 14.1 Socket 套接字编程入门
Winsock是Windows操作系统上的套接字API,用于在网络上进行数据通信.套接字通信是一种允许应用程序在计算机网络上进行实时数据交换的技术.通过使用Windows提供的API,应用程序可以创建 ...
- 产品代码都给你看了,可别再说不会DDD(七):实体与值对象
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- Net 高级调试之三:类型元数据介绍(同步块表、类型句柄、方法描述符等)
一.简介 今天是<Net 高级调试>的第三篇文章,压力还是不小的.上一篇文章,我们浅浅的谈了谈 CLR 和 Windows 加载器是如何加载 Net 程序集的,如何找到程序的入口点的,有了 ...
- NLP文本生成全解析:从传统方法到预训练完整介绍
本文深入探讨了文本生成的多种方法,从传统的基于统计和模板的技术到现代的神经网络模型,尤其是LSTM和Transformer架构.文章还详细介绍了大型预训练模型如GPT在文本生成中的应用,并提供了Pyt ...
- 告别繁琐,ModelArts一键解决车牌号识别难题
本文分享自华为云社区<基于ModelArts实现车辆车牌号的目标识别>,作者:屿山岛 . 前言 车辆车牌是车辆的唯一身份标识,能够提供车辆的类型.颜色.归属地等信息,对于交通管理.安全监控 ...
- Kafka 集群如何实现数据同步?
哈喽大家好,我是咸鱼 最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T 刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢 ...
- DX后台截图C++实现代码
DX后台截图C++实现代码 文章仅发布于https://www.cnblogs.com/Icys/p/DXGI.html和知乎上. 传统的GDI API (BitBlt)虽然可以完美的完成后台截图的任 ...