数据库空间爆了怎么处理

news2024/9/20 16:59:46
作者:

马文斌

时间:

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.coloradmin.cn/o/1424531.html

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

相关文章

springboot142新冠病毒密接者跟踪系统

新冠病毒密接者跟踪系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab) 支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,用于分类和回归分析。SVM的主要目标是找到一个最优的超平面(或者在非线性情况下是一个最优的超曲面),将不同类别的样本分开…

第二证券:沪指再度失守2800点,2月行情怎么走?

周三A股三大指数继续下行&#xff0c;上证指数再度失守2800点。 1月31日&#xff0c;沪深股指早盘小幅收拾后快速下行&#xff0c;盘中一度克复部分跌幅&#xff0c;但午后沪深股指再次回落。到收盘&#xff0c;沪指指数跌1.48%&#xff0c;深证成指跌1.95%&#xff0c;创业板…

Linux——安装MySQL

1、安装mysql8.0.35 1.1、安装步骤 1.更新包列表&#xff0c;首先&#xff0c;确保您的系统已更新到最新状态。运行以下命令来更新包列表和安装最新的软件包&#xff1a; sudo apt update sudo apt upgrade2.安装MySQL服务器&#xff1a;运行以下命令来安装MySQL服务器&…

windows 谷歌浏览器Chrome 怎么禁止更新

1.首先把任务管理器里的谷歌浏览器程序结束&#xff1a; &#xff08;鼠标在任务栏右击&#xff0c;出现任务管理器&#xff09; 2.windowr&#xff0c;输入services.msc 带有Google Update的服务&#xff0c;选择禁用。 3.windowr&#xff0c;输入taskschd.msc 任务计划程序…

蓝桥杯---牌型种数

小明被劫持到X赌城&#xff0c;被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张)&#xff0c;均匀发给4个人&#xff0c;每个人13张。这时&#xff0c;小明脑子里突然冒出一个问题&#xff1a;如果不考虑花色&#xff0c;只考虑点数&#xff0c;也不考虑自己得到的牌的先后…

《幻兽帕鲁》1月29日游戏服务器推荐!腾讯云降低规格再次降价!

腾讯29日刷新规格&#xff0c;从14M降低到12M&#xff0c;硬盘和流量都有降低&#xff0c;但价格打下来了&#xff01;价格从66元/月降低到32元/月&#xff0c;277元/3个月降低到96元/3个月&#xff01; 三大厂商4核16G的云服务器价格对齐&#xff0c;不过具体参数略有不同 阿里…

D2025——双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用

D2025 为立体声音频功率放大集成电路&#xff0c;适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点&#xff1a;  适用于立体声或 BTL 工作模式  外接元件少  通道分离性好  电源电压范围宽&#xff08;3V~12V…

基于SpringBoot+Vue实现的物流快递仓库管理系统

基于SpringBootVue实现的物流快递仓库管理系统 文章目录 基于SpringBootVue实现的物流快递仓库管理系统系统介绍技术选型成果展示账号地址及其他说明源码获取 系统介绍 系统演示 关注视频号【全栈小白】&#xff0c;观看演示视频 基于SpringBootVue实现的物流快递仓库管理系…

SpringAop实现访问日志功能的添加

AOP 是 Spring 体系中非常重要的两个概念之一&#xff08;另外一个是 IoC&#xff09;&#xff0c;今天这篇文章就来带大家通过实战的方式&#xff0c;在编程猫 SpringBoot 项目中使用 AOP 技术为 controller 层添加一个切面来实现接口访问的统一日志记录。 #一、关于 AOP AO…

竞品数据要如何利用

品牌在做控价的过程中&#xff0c;首先需要先采集数据&#xff0c;然后再做数据的治理&#xff0c;在这个过程中&#xff0c;会涉及到大量的数据采集工作&#xff0c;采集的标准通常是按品牌关键词、店铺名、链接名等进行检索&#xff0c;采集本品的时候&#xff0c;也会筛选到…

2015年苏州大学837复试机试C/C++

2015年苏州大学复试机试 第一题 题目 有36块砖&#xff0c;现在有36个人&#xff0c;男人能搬4块&#xff0c;女人能搬3块&#xff0c;小孩子两人搬一块&#xff0c;求一次搬完这些砖要男人&#xff0c;女人&#xff0c;小孩多少人&#xff1f; 代码 #include <iostrea…

我的创作纪念日和前端碎碎念

机缘 作为一个前端开发者&#xff0c;我一直热衷于将设计和技术相结合&#xff0c;尽可能提升用户体验。我最初成为创作者的初心源于学习记录&#xff0c;把创作当作一个笔记&#xff0c;希望把自己遇到的问题&#xff0c;以及学习到的实用技巧记录下来&#xff0c;方便学习回…

VMware虚拟机安装macOS

VMware虚拟机安装macOS 文章目录 VMware虚拟机安装macOS先看效果一、准备工作①&#xff1a;镜像资源下载②&#xff1a;虚拟机③&#xff1a;安装macOS所必要的插件 二、开始安装①&#xff1a;创建新的虚拟机②&#xff1a;自定义硬件③&#xff1a;开启虚拟机④&#xff1a;…

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…

字符串操作函数1

1.strcpy使用 使用这个函数我们可以进行字符串拷贝。它有两个参数&#xff0c;第一个参数是指向目标空间&#xff0c;第二个参数是指向需要拷贝的字符串。返回值为拷贝完成后指向的字符串首地址。头文件为<string.h> 演示如下&#xff1a; 注意&#xff1a; • 源字符…

2024-01-31(MapReduce,YARN)

1.MapReduce --- 分布式计算框架 MapReduce是分散--->汇总模式的分布式框架&#xff0c;可以供开发人员开发相关程序进行分布式数据计算 MapReduce提供了2个编程接口&#xff1a;Map接口&#xff0c;Reduce接口 其中&#xff0c;Map接口提供了“分散”功能&#xff0c;由…

【力扣经典面试题】189. 轮转数组

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 …

OpenAI开放新功能,可通过@一键调用任意GPTs

人工智能技术的快速发展为我们的生活带来了许多便利和创新。作为人工智能领域的重要成果之一&#xff0c;OpenAI的GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型在自然语言处理方面取得了巨大的突破。 近日&#xff0c;OpenAI宣布推出了GPT Mentions功能…

shell脚本之多行重定向 免交互 expect ssh scp; 字符处理

多行重定向 使用I/O重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可…