mysql大数据量查询瓶颈解决方案-供参考

项目运行了三年了,流水表主表数据已经达到4kw以上

所以最近项目开始时不时的出现问题,主要体现在以下方面:

1.客户端经常出现查询超时。

1.1 mybatis分页查询出现问题。

对于这个情况,我在这篇博客中做了描述,可以移步查看下。

https://mp.csdn.net/mp_blog/creation/editor/134708058

1.2 项目里面一些统计或者趋势图开始出现问题

这种情况看到后基本情况就是sql中常出现count()、sum()等等聚合函数。查了一下午资料,发现还是对于mysql没有理解透彻,本来以为聚合函数就是简单的累加等操作,结果发现mysql会一条条的取出来然后进行累计或其他操作。

2.高峰期有时候日志会报锁表。

这个情况的出现是因为,我最近看到主表数据量太大了,所以就开始分表操作。按月进行分表,主要逻辑是每三分钟从主表中取出最早一小时的数据(大概在3k-5k条),然后插入到月表,然后根据id批量删除主表。

但是就是这个简单的操作,看似没什么问题,今天高峰期的时候,CPU直接飙升到200%。然后仔细分析后,就是高峰期的时候对数据库的读写频率本就高,再加上我这个批量操作,直接导致锁表。

针对以上情况,开始跟同事讨论解决方案:

1.读写分离很有必要

为了不让数据库频繁读写导致锁表,必须要把读写分离开启。(之前没有打开)。这样才能保证数据同步到月表中。

2.针对分页的问题已经描述了 请移步,地址在上方

3.分库分表

数据量太大,分库的操作是必须要做的。对于count等聚合函数的操作,只能在数据同步完成后,在月份表里面进行统计。

4.一定要对于经常做统计的数据进行报表处理

具体来讲就是。如果我系统中经常有要查询3天内、7天内...这样的情况,那就要做日报表,每天把数据统计好,这样后面直接从日报表中取数据。如果出现当天每小时的查询,那就要进行时段报表的统计,记录每天每小时的统计数据,这样才能保证不是所有的数据都从主表里面进行查询。因为主表的数据只要慢慢累加,总有一天会达到mysql的瓶颈。目前4KW已经事故频发,迫使我们不得不改造项目。

只是一些经验,当然每个人的情况不一样,因为项目在我们主导,所以可操作空间比较大,但是如果是一些已经运行了很久的项目,最好的方式就是根据上方第四条做拓展,这样不会对原有业务影响太大。

相关推荐
HackTwoHub20 分钟前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t26 分钟前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK34 分钟前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)1 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X2 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK3 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
BU摆烂会噶4 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t5 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper5 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程
light blue bird5 小时前
主子端台二分法任务汇总组件
前端·数据库·.net·桌面端winform