技术分享 | 如何优雅的删除 Zabbix 的 history 相关历史大表

ZABBIX历史记录占用磁盘过大清理方法 阅读详情

作者:徐文梁

爱可生DBA成员,一个执着于技术的数据库工程师,主要负责数据库日常运维工作。擅长MySQL,redis,其他常见数据库也有涉猎,喜欢垂钓,看书,看风景,结交新朋友。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


问题背景:

前段时间,客户反馈 Zabbix 实例的 history_str 表数据量很大,导致磁盘空间使用率较高,想要清理该表,咨询是否有好的建议。想着正好最近学习了相关的知识点,正好可以检验一下学习成果,经过实践的检验,最终考试合格,客户也比较满意,于是便有了此文。

问题沟通:

通过实际查看环境及与客户沟通,得出以下信息:

1.现场是双向主从复制架构,未设置从库read_only只读。

2.history_str表的ibd数据文件超460G。

3.history_str表的存量数据可以直接清理。

4.现场实例所在的服务器是虚拟机,配置较低。

因此,综合考虑后建议客户新建相同表结构的表然后对原表进行drop操作,但是表数据量比较大,需要考虑以下风险:

1.drop大表可能会导致实例hang住,影响数据库正常使用。

2.drop大表操作导致主从延时。

3.删除大文件造成磁盘io压力较大。

最终方案:

在考虑以上的基础上,最终给出如下方案:

1.在主库执行如下命令建立相同表结构表并进行rename操作:

create table history_str_new like history_str;
rename table history_str to history_str_old, history_str_new to
history_str;

2.在主库和从库执行以下操作,建立硬链接文件:

ln history_str_old.ibd history_str_old.ibd.hdlk

3.完成第二步后,建议间隔一两天再进行操作,让history_str_old表数据从innodb buffer pool中冷却,然后业务低峰期在主从库分别执行如下操作,建议先操作从库,从库验证没问题后再在主库操作:

set sql log bin=0;       //临时关闭写操作记录binlog
drop table history_str_old;//执行drop操作
set sql log bin=l;       //恢复写操作记录binlog

4.删除history_old.ibd.hdlk文件,释放空间,可以通过linux的truncate命令实现,参考脚本如下:

#!/bin/bash
##############################################################################
##            第一个参数为需要执行操作的文件的文件名称           ##
##           第二个参数为每次执行操作的缩减值,单位为MB          ##
##           第三个参数为每次执行后的睡眠时间,单位为S           ##
##############################################################################
  
fileSize=`du $1|awk -F" " '{print $1}'`
fileName=$1
chunk=$2
sleepTime=$3
chunkSize=$(( chunk * 1024 ))
rotateTime=$(( fileSize / chunkSize ))
declare -a currentSize
echo $rotateTime
  
function truncate_action()
{
for (( i=0; i<=${rotateTime}; i++ ))
do
if [ $i -eq 0 ];then
echo "开始进行truncate操作,操作文件名为:"$fileName
fi
  
if [ $i -eq ${rotateTime} ];then
echo "执行truncate操作结束!!!"
fi
  
truncate -s -${chunk}M $fileName
currentSize=`du -sh $fileName|awk -F" " '{print $1}'`
echo "当前文件大小为: "$currentSize
sleep $sleepTime
done
}
  
truncate_action

示例:sh truncateFile.sh history_str_old.ibd.hdlk 256 1,表示删除history_str_old.ibd.hdlk文件,每次截断大小为256M,然后sleep间隔为1s。

5.到此,静静等待就行了。无聊的话也可以思考一下人生。

小知识:

前面解决了如何操作的问题,但是作为一个称职的DBA,不光要知道如何做,还得知道为什么这么做,不然的话,敲回车键容易,后悔却很难,干货来了,一起了解一下吧。下次遇到类似问题就不慌了。

tips1:

MySQL删除表的流程:
1.持有buffer pool mutex。
2.持有buffer pool中的flush list mutex。
3.扫描flush list列表,如果脏页属于drop掉的table,则直接将其从flush list列表中移除。如果开启了AHI,还会遍历LRU,删除innodb表的自适应散列索引项,如果mysql版本在5.5.23之前,则直接删除,对于5.5.23及以后版本,如果占用cpu和mutex时间过长,则释放cpu资源,flush list mutex和buffer pool mutex一段时间,并进行context switch。一段时间后重新持有buffer pool mutex,flush list mutex。
4.释放flush list mutex。
5.释放buffer pool mutex。

tips2:

对于linux系统,一个磁盘上的文件可以由多个文件系统的文件引用,且这多个文件完全相同,并指向同一个磁盘上的文件,当删除其中任一一个文件时,并不会删除真实的文件,而是将其被引用的数目减1,只有当被引用数目为0时,才会真正删除文件。

tips3:

大表drop或者truncate相关的一些bug:
 
这两个指出drop table 会做两次 LRU 扫描:一次是从 LRU list 中删除表的数据页,一次是删除表的 AHI 条目。
https://bugs.mysql.com/bug.php?id=51325
https://bugs.mysql.com/bug.php?id=64284
  
对于分区表,删除多个分区时,删除每个分区都会扫描LRU两次。
https://bugs.mysql.com/bug.php?id=61188
  
truncate table 会扫描 LRU 来删除 AHI,导致性能下降;8.0 已修复,方法是将 truncate 映射成 drop table + create table
https://bugs.mysql.com/bug.php?id=68184
  
drop table 扫描 LRU 删除 AHI 导致信号量等待,造成长时间的阻塞
https://bugs.mysql.com/bug.php?id=91977
  
8.0依旧修复了 truncate table 的问题,但是对于一些查询产生的磁盘临时表(innodb 表),在临时表被删除时,还是会有同样的问题。这个bug在8.0.23中得到修复。
https://bugs.mysql.com/bug.php?id=98869
Ubuntu 12.04下用Shinken实现轻量SNMP监控VPS SNMP(简单网络管理协议)是跨平台、无代理的基础设施监控基石,其核心原理基于UDP轮询标准MIB-II OID获取设备运行状态。相比Zabbix等重型方案,Shinken凭借纯Python实现、进程解耦架构和原生Nagios兼容性,在资源受限场景中展现出独特技术价值:内存占用低至42MB、支持热重载、故障隔离性强。该方案特别适用于老旧系统运维、免费VPS资源监控及SNMP协议层学习实践,可直接对接Linux/网络设备的标准SNMP接口,无需安装Agent,真正实现轻量、稳定、可调试的生产级监控链路。 阅读详情

相关推荐

从零构建自动化研发运维Agent:架构设计与Python实战

在软件工程领域,自动化是提升研发运维效率的核心驱动力。其基本原理是通过预设规则或智能决策,将重复性、标准化的操作交由系统自动执行,从而减少人工干预,降低错误率。这一技术价值在于释放工程师的创造力,使其专注于更高阶的设计与创新任务。在DevOps和AIOps实践中,自动化广泛应用于持续集成、持续部署、监控告警响应等场景。本文聚焦于如何构建一个智能化的研发运维Agent,它作为流程中枢,能够统一处理来自GitLab、Jenkins等系统的Webhook事件,并基于规则引擎或大型语言模型(LLM)进行决策,自动触

weixin_30552811的博客 398

zabbix数据库history相关数据占用空间太大解决

zabbix数据库history相关数据占用空间太大解决 今天有台服务器磁盘报警,使用du -sh * (当前文件夹下的文件大小)一步步排查,发现/var/lib/mysql/zabbix/这个目录占用磁盘空间较大 [root@localhost mysql]# pwd /var/lib/mysql [root@localhost mysql]# du -sh zabbix 5.9G zabbix 在进入到zabbix中,进一步看到是其中history_uint.ibd和history.ibd两个表的数据

zhaixing 8609

Zabbix --- History 和 Trends

注:该文作者是 Ricardo Santos,原文是 History and Trends 这两个术语可能会导致一些混乱,但理解它们对中小型的环境是至关重要的。 History 所有收集的数据,不管它们是什么类型,被存储在 history 表中。 Trends Trends 基本上是收集到的按小时合并的数据(仅仅是数值类型)。Zabbix 服务器按小时把所有的值从 history 表

xiangyong882000的专栏 3122

zabbix清理历史数据

zabbix清理历史数据

oSuiBian12345678的博客 1688

5. Zabbix 的可视化 - 图形

本章介绍Zabbix的图像基本知识

speedwalkman的专栏 1456

zabbix查询历史数据

近期公司准备对zabbix监控告警进行完善,之前的好多阈值设置不合理,现在分配风控部门的同事与我合作,一块做这个事情;风控部门的同事主要对zabbix监控的历史数据进行分析,建模,以设定一个较合理的阈值;我的任务是先从zabbix数据库中取出相关监控项的历史数据,比如一个月的数据;之前不知道怎么取数,研究了两天,重于有点收获了,特此记录下取出历史数据的过程,如有错误,还请指出; use zabbi...

十里平湖的博客 1万+

从校招笔试到生产实战:系统运维工程师核心技能全解析

系统运维是保障业务稳定性的基石。从Linux基础命令到网络协议,从数据库主从复制到监控告警体系,运维工程师需要掌握一套完整的技术栈。生产环境中的架构规划、环境初始化、组件部署与安全基线,都要求工程师具备从零搭建系统的实战能力。而校招笔试正是考察这种能力的试金石,通过场景题与故障排查题目,筛选出真正具备工程素养的人才。本文以滴滴校招运维笔试题为引,梳理了系统运维的核心知识体系与常见实践坑点,为运维新人提供从理论到实操的参考。

weixin_30444105的博客 382

清理 Zabbix 历史数据,优化 MySQL 空间利用

在使用 Zabbix 进行监控和数据收集的过程中,系统可能会积累大量的历史数据,导致 MySQL 数据库空间占用过高。为了优化数据库性能和节省存储空间,我们可以定期清理 Zabbix 的历史数据。综上所述,清理 Zabbix 历史数据并优化 MySQL 空间利用是优化 Zabbix 性能和减少存储空间占用的重要步骤。通过定期清理历史数据,并进行数据库的优化操作,可以有效提升系统的运行效率和稳定性。一旦停止了 Zabbix 服务,我们可以使用 Zabbix 自带的工具。步骤二:停止 Zabbix 服务。

ZaxfSass的博客 2069

4款被低估的开发效率神器:DBeaver、Postman、Warp、NetData深度解析

在软件开发领域,提升效率的关键往往在于优化日常工具链。从基础概念上讲,高效的开发工具通过封装复杂流程、减少上下文切换和自动化重复任务,来降低开发者的认知负荷。其技术价值在于将繁琐操作简化为直观交互,从而释放开发者专注于核心逻辑的创造力。这类工具在数据库管理、API调试、终端操作和系统监控等高频应用场景中尤为重要。例如,**DBeaver** 作为通用数据库客户端,解决了多数据库环境管理的痛点;而 **Postman** 则成为API开发、测试与团队协作的基石。本文将自然聚焦于这四款能切实提升交付质量和开发体

congsikuai0611的博客 541

Zabbix监控历史数据自动清理方案

然而,随着时间的推移,Zabbix中的历史数据会不断增长,这可能导致数据库负荷增加,并且占用大量的存储空间。首先,我们需要在脚本中配置Zabbix服务器的URL和API访问令牌,以及要清理的历史数据的保留时间。在Zabbix监控系统中,随着时间的推移,历史数据会越来越多,这可能导致数据库的负荷增加,并且占用大量的存储空间。以下是一个基于Zabbix API和Python脚本的示例方案,该方案可以定期清理Zabbix中的历史数据。需要注意的是,脚本中的时间单位是以秒为基准的时间戳。

YbeCoder的博客 984

ADS 使用调整器动态调参教程(Tuning)

ADS动态调参教程

weixin_42845306的博客 1万+

Zabbix清理历史数据,并使用shell脚本自动定期清理

Zabbix 是一个流行的开源监控解决方案,随着zabbix监控运行时间的推移,其数据库中的历史数据可能会不断增长,影响系统性能。为了解决这个问题,可以定期自动清理数据库中的旧数据。history表。浮点历史数据表。与items表相关联。history_log表。历史日志表,与itmes表相关联history_str表。字符串的历史数据表。history_text表。长文本历史数据表,支持255字符以上的文本,与items表相关联history_uint表。长整型历史数据表,与items表相关联。

为同样对技术充满热情的读者提供有价值的内容 2746

✔B【AD623】【单运放】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

【】仪表放大器 AD623电压放大器模块可调 单电源 单端/差分 微小信号

童话与梦的博客 8274

pgsql: zabbix 历史表history_uint变更为分区表

zabbix的pgsql数据库将历史表修改为分区表

hh的博客 706

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

MATLAB双目相机标定:从工具箱实战到参数精解

本文详细讲解了使用MATLAB进行双目相机标定的完整实战流程与参数精解。从拍摄合格的棋盘格图像、设置关键参数(如径向畸变系数),到分析重投影误差、优化结果并正确导出和使用内外参,提供了从操作到原理的全面指导,帮助读者为立体视觉应用奠定精准基础。

weixin_29041767的博客 257

zabbix 清理历史数据

1.说明 zabbix运行一定时间后,会留下大量历史数据,发现zabbix的数据库会一直在增大,运行1年6个月后数据库ibdata1的数据为432G,造成性能下降,查看历史数据时查询速度变慢。 zabbix数据库里面最大的便是历史记录表,由于数据过大选择清空表,也可选择根据时间删除里面的历史记录(zabbix里面的数据使用时间戳的方式记录)。 2 历史数据清理 2.1 停止相关服务,避免数据写入 systemctl status mariadb.service systemctl

wanchaopeng的博客 5706

保姆级教程:在Ubuntu 20.04上搞定PX4飞控与T265的视觉定位(附避坑指南)

本文提供在Ubuntu 20.04上配置PX4飞控与T265视觉定位系统的详细教程,涵盖驱动安装、ROS与MAVROS桥接、PX4参数调优及故障排查。通过实测验证的步骤和避坑指南,帮助开发者实现厘米级精度的视觉定位,特别适合室内无人机应用。

weixin_29038155的博客 248

zabbix mysql 表分区_zabbix history表、history_uint等表分区尝试

为了能够容易清理zabbix的历史数据,看来还是得分区。主要是history、history_uint、history_str、history_text、trends、trends_uint。为了能看到监控数据的曲线图,trends和trends_uint里一定要有对应时段的监控项数据。分区的尝试如下,MySQL5.6,只举一个history_uint的例子,其他表基本一样。不同版本的zabbix...

weixin_42641998的博客 1978

rk3588s-摄像头适配gc8034

若还打开失败,需要看下XML中文件配置是否与DTS配置信息一致,或者XML参数配置是否有异常;MIPI摄像头是有上电时序要求,具体时序要查看sensor芯片对应的datasheet进行修改,如果时序不满足,sensor无法正常,此时用i2ctool去查看设备可能无法扫面到设备,即是i2c设备找不到。RK3588或者RK3588S有路MIPI-PHY,驱动开发工程师需要根据对应的硬件原图进行配置,以下会讲解分别使用MIPI-DPHY和MIPI-D/CPHY如何在DTS配置mipi摄像头的回环链路。

Yxx8066的博客 2199

【XCharts插件】5-2、从Excel中读取数据并更新图表案例(v3.0)

XCharts插件是一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。【Unity3D插件】XCharts插件完全教程《全网最全》-专栏文章目录【XCharts插件】5-1、从Json中读取数据并更新图表案例(v3.0)介绍了如何从Json文件中读取数据,并更新表格,这篇文章就介绍如何从Excel中读取数据,并更新图表吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1274

【Zabbix系统学习】Zabbix看以前监测的数据

Zabbix怎么看以前监测的数据

qq_46384509的博客 779

【ROS2】从yaml文件中读取参数配置

ROS2:从yaml中读取参数,到节点;使用C++演示参数的增、删、改、查、遍历、监听变化

郭老二 1284

zabbix历史数据相关表研究

zabbix历史数据相关表研究 history和trends相关表 history和trends都是存储历史数据的地方。一般是通过监控项(item)配置里、匹配更新监控项(item)和设置HouseKeeper tasks来设置保留数据的时长。 Housekeeper 会定期删除过期的数据。如果不是特别有意义,建议你把保留时间设置短一些, 如果想看以前的数 据图怎么办?这里趋势数据就派上...

weixin_30411997的博客 650

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

清理Zabbix下MySQL中的zabbix数据库历史数据记录

问题描述: 今天同事说有个zabbix监控数据库历史数据越来越多了,让我帮忙清一下,顺便熟悉练练手,做个笔记 zabbix监控运行一段时间以后,会留下大量的历史监控数据 zabbix数据库一直在增大可能会造成系统性能下降,查看历史数据室查询速度缓慢。 zabbix里面最大的表就是history和history_uint两个表,但是我这边查看到history_log表也是最大的。 而且za...

漫步技术小栈的博客 1539

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Zabbix 5.0 LTS在清理历史数据后最新数据不更新

Zabbix 5.0 LTS,跑了一年多了一直很稳定,前两天空间显示快满了,于是手贱清理了一下history_uint表(使用mysql truncate),结果折腾了一周。大概故障如下:然后zabbix论坛、各种群问了好久都没解决,最后自己一番折腾似乎搞定了。初步怀疑,应该是由于历史数据被清空后,zabbix需要去处理数据,但是数据量太大,跑不过来,所以来不及更新了(?)...

qq_27109281的博客 1257

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 故障分析 | 一次规律的 MySQL 主从延迟跳变
下一篇: 故障分析 | 从 Insert 并发死锁分析 Insert 加锁源码逻辑
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值