当前位置: 首页 > java >正文

大数据量查询计算引发数据库CPU告警问题复盘

大数据量查询计算引发数据库CPU告警问题复盘

  • 一、背景
  • 二、根因分析
  • 三、解决方案
    • 方案1:多线程+缓存
    • 方案2:利用中间表+缓存
  • 四、总结

一、背景

2025年7月份某天,CDP系统每天不定时推送我们的Portal服务,生产环境运营看板会展示统计数据,发现接口响应缓慢,随之而来数据库监控告警,发现数据库CPU达到了80%。由于表数据量大,计算统计复杂,多线程使用不当,导致数据库服务器爆表。
其中A表数据量达到1亿多,B表数据量600w+,C表数据量30w+,D表数据量400w+.

二、根因分析

1:涉及A、B、C、D四张表的关联查询,数据量巨大。
2:页面查询条件组合较多,初步估计数据量10亿+,而且日期条件多变,无法使用预计算方式提升查询效率。
3:CDP不定时同步,导致每次存量数据无法基线,增量数据的统计依赖于存量数据,故无法使用增量方式计算结果。
4:1次查询搜索,会调用6个接口,1个接口查询数据库6+次,整体耗时较久。

三、解决方案

方案1:多线程+缓存

1:前端查询接口,先查询缓存,如果查询到则直接返回结果。如果查询不到,再查询缓存并将结果更新到缓存中。
2:在后端接口计算中,采用多线程方式,并行计算,然后再统计结果。
3:但是这个方案有个弊端是在缓存中查询不到时候还会查询数据库,接口响应依然缓慢,而且生产环境会产生许多慢SQL。所以,此方案不采纳。

方案2:利用中间表+缓存

1:分析这四张表发现,最大的表A仅仅起到连接的作用,运营看板计算数据主要来自于B表数据量600w+和C表数据量30w+。因此,新增E表,将所需要的A表与D表的关联数据通过定时任务方式同步到E表,最后E表中数据量为400w+,相比与直接关联A表和D表,数据量整体降低了几百万,后续直接关联查询B表数据量600w+、C表数据量30w+和E表400w计算即可。
2:前端查询接口,先查询缓存,如果查询到则直接返回结果。如果查询不到,再查询缓存并将结果更新到缓存中。

四、总结

采用空间换时间方式,优化了大表关联查询性能,也是一种不错的方案。

http://www.xdnf.cn/news/16027.html

相关文章:

  • WAF 防护与漏洞扫描联动:让安全防御更精准高效
  • python办自动化--读取邮箱中特定的邮件,并下载特定的附件
  • 数据库—修改某字段默认值
  • importlib.import_module() 的用法与实战案例
  • Java值传递和构造函数
  • Java 并发性深度解析
  • C# 基于halcon的视觉工作流-章21-点查找
  • 【前端】ikun-pptx编辑器前瞻问题一: pptx的xml样式, 使用html能100%还原么
  • 【计算机网络 篇】TCP基本认识和TCP三次握手相关问题
  • 基于springboot的医院后台管理系统的设计与实现(源码+论文)
  • 【python数据结构算法篇】python算法
  • Ubuntu 虚拟机配置 与Windows互传文件
  • 零事故网站重构:11步标准化流程与风险管理指南
  • PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC
  • 【Spring Boot】Spring Boot循环依赖破解:@Lazy与Setter注入的取舍指南(流程图修复版)
  • Oracle RAC+ADG switchover 切换演练流程
  • 【文献笔记】ARS: Automatic Routing Solver with Large Language Models
  • LabVIEW 2025安装包| 免费免激活版下载| 附图文详细安装教程
  • Tailwind CSS快速上手 Tailwind CSS的安装、配置、使用
  • 使用qt编写上位机程序,出现串口死掉无法接受数据的bug
  • 【windows修复】解决windows10,没有【相机] 功能问题
  • 前端学习 4:一些术语集合
  • 自研能管项目开发界面
  • uniapp “requestPayment:fail [payment支付宝:62009]未知错误“
  • Gerrit多仓库对应多邮箱配置办法
  • 上下文工程的系统性优化:从组件到整合架构
  • 【ArcGIS Pro】设置临时存储文件夹(计算缓存数据存放位置)
  • 网络安全实验 番外篇 使用Web登录eNSP中防火墙
  • 【指南】网络安全领域:HW 行动(国家网络安全攻防演练)是什么?
  • opencv简介(附电子书资料)