数据库空间爆了怎么处理

作者:

马文斌

时间:

2024-1-29

标签:

mysql 磁盘空间 爆满 binlog

背景

近期数据库空间一直告警,平时这套数据库集群是不会有磁盘空间告警的,难道是最近业务量猛增了吗?咱们来瞧瞧到底怎么回事?

清理binlog

先清理一些历史的binlog,这样可以马上释放磁盘空间

PURGE BINARY LOGS TO 'mysql-bin.059306';

统计大表

test_plat_order_record
test_plat_order_record_original

统计这个大表的数据量

SELECT COUNT(*), DATE_FORMAT(test_update_time, '%Y-%m') AS formatted_update_time-> FROM test_plat_order_record-> GROUP BY formatted_update_time-> ORDER BY formatted_update_time;
​
+----------+-----------------------+
| COUNT(*) | formatted_update_time |
+----------+-----------------------+
|       11 | 2019-10               |
|     1021 | 2019-11               |
|      343 | 2019-12               |
|        1 | 2020-04               |
|        1 | 2020-06               |
|        2 | 2020-08               |
|       50 | 2020-11               |
|        4 | 2021-01               |
|       52 | 2021-04               |
|       29 | 2021-05               |
|      100 | 2021-06               |
|       37 | 2021-07               |
|      102 | 2021-08               |
|       29 | 2021-09               |
|       84 | 2021-10               |
|       86 | 2021-11               |
|      115 | 2021-12               |
|       70 | 2022-01               |
|       45 | 2022-02               |
|       27 | 2022-03               |
|       42 | 2022-04               |
|       35 | 2022-05               |
|       11 | 2022-06               |
|        5 | 2022-07               |
|       11 | 2022-08               |
|       11 | 2022-09               |
|       18 | 2022-10               |
|       66 | 2022-11               |
|       59 | 2022-12               |
|       23 | 2023-01               |
|       36 | 2023-02               |
|       15 | 2023-03               |
|        7 | 2023-04               |
|       50 | 2023-05               |
|      209 | 2023-06               |
|     1624 | 2023-07               |
|  1589513 | 2023-08               |
|  2340076 | 2023-09               |
|  2234520 | 2023-10               |
|  5123385 | 2023-11               |
|  2307748 | 2023-12               |
|  2211829 | 2024-01               |
+----------+-----------------------+
42 rows in set (3 min 2.90 sec)
​

统计每天产生的binlog日志文件大小,可以看到每天大概产生250G的日志文件

ls --full-time | grep ^- | \
awk '{s[$6]+=$5} END{for(i in s) {printf("%s %0.2f\n", i,s[i]/1024/1024)}}' | sort
​
2024-01-21 254712.17
2024-01-22 106553.17

解释下这个命令

这个命令是一个用于统计文件大小并按日期分类的Linux命令。让我们一步步解释:
​
ls --full-time: 列出当前目录下所有文件的详细信息,包括文件大小和最后修改时间。
​
grep ^-: 过滤出只有普通文件(不包括目录、链接等)的行。这是通过^符号表示行的开头是普通文件来实现的。
​
awk '{s[$6]+=$5} END{for(i in s) {printf("%s %0.2f\n", i,s[i]/1024/1024)}}':
​
s[$6]+=$5: 使用awk脚本,创建一个关联数组s,其中索引是文件的修改日期(第6列),值是文件大小(第5列)。这将对相同日期的文件大小进行累加。
END{for(i in s) {printf("%s %0.2f\n", i,s[i]/1024/1024)}}: 在处理完所有行后,使用END块循环遍历数组s,打印每个日期和对应的总文件大小(以MB为单位)。
sort: 对结果进行排序。
​
所以,最终输出将是按照日期分类的文件大小总和,以MB为单位。日期是文件的最后修改日期。这对于查看目录中每天创建或修改的文件的总大小是有用的。

保留1.5天binlog

binlog_expire_logs_seconds=129600

应用层面分析

用my2sql分析binlog

分析脚本
#!/bin/bash
createtime=`date +%Y-%m-%d_%H-%M-%S`
datadir=/tmp/$createtime
mkdir $datadir
/usr/local/bin/my2sql  -user testuser -password xxxxx -host 192.168.1.1 -work-type 2sql  -start-file mysql-bin.061073 -stop-file mysql-bin.061075 -output-dir $datadir
echo "请在 这个文件查看输出结果 cd $datadir"
​
分析binlog
cat binlog_status.txt |awk '{print $2,$7,$NF}'|sort -k2,2nr > sort_status.txt

通过分析是binlog,发现2张表分析很频繁,每次都是几千条数据一起更新,其中test_plat_order_record 有个大对象字段 mediumtext ,其中 L< 2 的24次方,等于最大可以存16MB内容,业务说是一些操作的报文内容。

[root@db-oms-slave-32-228 2024-01-23_10-12-48]# more sort_status.txt 
2024-01-23_08:01:34 3371 test_order_status
2024-01-23_08:01:34 3342 test_plat_order_record
2024-01-23_08:00:34 2720 test_order_status
2024-01-23_08:00:34 2599 test_plat_order_record
2024-01-23_07:57:21 2518 test_order_status
2024-01-23_07:57:21 2484 test_plat_order_record
2024-01-23_08:00:00 2085 test_order_status

1问其能否优化这个大对象报文内容吗?

答曰:暂时无法改造

2问最近是业务量猛增吗?公司要起飞啦

答曰:是其他电商平台的数据导入过来的,统一存储管理统计,业务量并无增长。

数据库层面优化

检查大对象sql:

SELECT table_schema, table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'ec_order'
AND data_type IN ('text', 'mediumtext', 'longtext', 'blob', 'mediumblob', 'longblob');

binlog压缩

主从读得开启才行

mysql> set persist binlog_transaction_compression=on;
mysql> set persist binlog_transaction_compression_level_zstd=10;

binlog压缩后的结论

1. MySQL 新推出的 binlog 压缩功能,当压缩级别设置为 10 时,压缩率约为 50% 左右,能够较大程度减少 binlog 所占用的空间。
2. 压缩功能能够一定程度提升因网络带宽所带来的主从延迟,集群tps不降低,略微提升。

大表压缩

alter table test ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

大概可以节省50%的空间

添加硬盘

/data 文件系统+300G的磁盘空间

总结

1、磁盘空间暴涨很多时候是因为表中有大对象字段,开发没有提前跟你说,这时候就需要sql审核层面多留心下,发现有大对象字段上线问其原因,能否减少写入的内容

2、紧急情况可以先清理一部分binlog 释放空间、先不影响业务

3、binlog暴涨的话,可以用my2sql工具分析binlog,并做排序,看看那些表变更插入频繁

4、了解业务 为什么要存了一些报文内容到数据库层面,能否做优化

5、数据库层面 表+binlog的压缩

6、添加磁盘空间

作者公众号:

参考资料:

新特性解读 | binlog 压缩

MySQL :: MySQL 8.0 Reference Manual :: 11.7 Data Type Storage Requirements

MySQL :: MySQL 8.0 Reference Manual :: 12.8 String Functions and Operators

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动盘重装ubuntu22系统

win+R msinfo32查看 插入制作好的u盘电脑开机 进入BIOS界面的方法有多种,以下是一些常见的方法: 进入BIOS界面的最常见按键有: Del键:大多数台式机通过在启动时按下Del键来进入BIOS。Esc键:在AMI BIOS和某些品牌电脑中,进入BIOS系统需要按“Esc”键,一般在开机画面…

草图导入3d之后渲染模型发光怎么回事?---模大狮模型网

在草图大师中&#xff0c;当导入3D模型之后发现模型发光通常是由于模型的材质属性或灯光设置所导致的。以下是一些可能的原因和解决方法&#xff1a; 材质属性设置&#xff1a;某些3D模型文件可能包含了发光材质属性&#xff0c;导致模型在草图大师中显示为发光状态。您可以尝试…

高性能跨平台网络通信框架 HP-Socket v6.0.1

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4592706661.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v6.0.1 更新 一、主要更新 优化Linux通信组件多路复用处理架构&#xff0c;避免“惊群”问…

AI赋能编程 | 自动化工具助力高效办公

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言泡泡AI工具卡片思维导图Markdown编辑器 其他工具文件免费处理工具结语 合集…

【大厂AI课学习笔记】1.3 人工智能产业发展(3)

1.3.1 供给侧 技术层面&#xff1a;从实验室走向大规模的商用。 数据层面&#xff1a;数据正式成为重要的生产要素。 市场&#xff1a;供需互促的正向市场环境建立。 资本&#xff1a;走出炒作泡沫&#xff0c;聚焦价值领域。 平台&#xff1a;大厂普遍开放生态。 MORE&am…

基于二值化图像转GCode的螺旋扫描实现

基于二值化图像转GCode的螺旋扫描实现 什么是双向扫描螺旋扫描代码示例 基于二值化图像转GCode的螺旋扫描实现 什么是螺旋扫描 螺旋扫描&#xff08;Spiral Scanning&#xff09;是激光雕刻中一种特殊的扫描方式&#xff0c;其特点是激光头按照螺旋形状逐渐向外移动&#xf…

【web | CTF】攻防世界 easyupload

天命&#xff1a;好像也不太easy 目录 步骤一&#xff1a;准备文件 步骤二&#xff1a;上传文件 本条题目有好几个防御点&#xff1a; 后缀名防御&#xff1a;只能上传图片格式内容防御&#xff1a;内容不能有php图片头防御&#xff1a;检测文件的头部信息&#xff0c;是否是…

zookeeper(2) 服务器动态上下线监听和分布式锁案例

案例一&#xff1a;服务器动态上下线监听 某分布式系统中&#xff0c;主节点可以有多台&#xff0c;可以动态上下线&#xff0c;任意一台客户端都能实时感知 到主节点服务器的上下线。 1.服务端代码 package com.atguigu.case1;import org.apache.zookeeper.*;import java.io…

微信小程序在线客服源码系统:聊天记录云端实时保存 带完整的搭建教程

微信小程序已经成为企业开展线上业务的重要渠道。然而&#xff0c;在小程序中提供客户服务需要解决聊天记录的存储与查询问题。传统的客服系统往往只能在本地保存聊天记录&#xff0c;一旦客户端出现问题&#xff0c;聊天记录可能会丢失&#xff0c;给企业带来巨大的损失。为了…

双屏联动系统在展厅设计中的互动类型与效果

随着各项多媒体技术的快速发展&#xff0c;让展厅中的各类展项得到技术升级&#xff0c;其中作为电子设备中最基础的显示技术&#xff0c;不仅优化了内容的展示质量&#xff0c;还实现了更具互动性的创新技术&#xff0c;如双屏联动系统就是当前展厅设计中最常见的技术类型之一…

【C++】类和对象(1)

上节我们学习了C入门的一些语法知识&#xff0c;这篇博客来学习类和this指针。 目录 面向过程和面向对象的初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象大小 this指针 this指针特性 面向过程和面向对象的初步认识…

UG949 适用于 FPGA 和 SoC 的UltraFast 设计方法指南

使用RTL创建设计 定义RTL设计层级 模块边界输出进行寄存 即寄存器输出&#xff0c;打一拍 IP的使用 AMBA AXI

AI 原生时代的云计算

本文整理自2023年 12 月 20 日举办的「2023 百度云智大会智算大会」主论坛&#xff0c;百度副总裁谢广军的主题演讲《AI 原生时代的云计算》。 &#xff08;视频回放链接&#xff1a;https://cloud.baidu.com/summit/aicomputing_2023/index.html&#xff09; 大模型的到来&…

Leetcode—807. 保持城市天际线【中等】

2024每日刷题&#xff08;一零四&#xff09; Leetcode—807. 保持城市天际线 实现代码 class Solution { public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {int n grid.size();vector<int> row(n);vector<int> col(n);int a…

代理模式详解(重点解析JDK动态代理)

- 定义 在解析动态代理模式之前&#xff0c;先简单看下整个代理模式。代理模式分为普通代理、强制模式、动态代理模式。其中动态代理模式主要实现方式为Java JDK提供的JDK动态代理&#xff0c;第三方类库提供的&#xff0c;例如CGLIB动态代理。 代理模式就是为其他对象提供一种…

ArcGIS学习(二)属性表的基本操作

ArcGIS学习(二)属性表的基本操作 1.查看属性表 ArcGIS是处理空间数据的平台。对于空间数据,大家可以理解成它是由两个部分构成:1.一个是空间形体,也就是点、线、面三种。线又可以分为直线、曲线,面又分为圆形、正方形、不规则形体等;2.另外一个部分是空间形体所附带的…

关于Spring框架的 @Configuration 与@Service 加载顺序哪个先后(某些环境加载是随机的)

很多资料都说Configuration 优先加载&#xff0c;Service后加载&#xff0c;如下图&#xff1a; 本来也是以为 Configuration 优先加载于 Service &#xff0c;那参数处理放在Configuration注入完后&#xff0c;service构建时就可以拿来用的&#xff0c;在我在IDEA的调试时下断…

喜讯 | 经纬恒润整车电子电气测试实验室通过一汽研发总院外部实验室资质认证!

近日&#xff0c;经纬恒润整车电子电气测试实验室成功通过中国一汽研发总院的资质评定&#xff0c;获得外部实验室认可证书。这是继经纬恒润测试实验室获得一汽智能网联开发院车载以太网测试资质认证之后的又一次认可&#xff0c;它将拓宽经纬恒润与红旗新能源及相关零部件供应…

分组密码工作模式

在密码学中&#xff0c;分组密码工作模式可以提供诸如机密性或真实性的信息服务。 基于分组的对称加密算法&#xff08;DES 、AES等&#xff09;只是描述如何根据加密密钥对一段固 定长度&#xff08;块&#xff09;的数据进行加密&#xff0c;对于比较长的数据&#xff0c;分组…

【Spring Boot 源码学习】BootstrapRegistry 详解

《Spring Boot 源码学习系列》 BootstrapRegistry 详解 一、引言二、往期内容三、主要内容3.1 源码初识3.2 register 方法3.3 registerIfAbsent 方法3.4 isRegistered 方法3.5 getRegisteredInstanceSupplier 方法3.6 addCloseListener 方法3.7 InstanceSupplier 内部接口类3.7…