SQL优化实战:如何通过缓存给MySQL查询进行流量削峰?

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP
V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF

前 言

经过前面索引和sql的优化后,现在查询速度快的飞起,然后,我们继续回归到了日常需求的开发中。

3个月过后,订单表的数据已经达到5000万了,不过sql一次查询的时间,基本稳定在300ms以下。

但是某个周一,leader刚开完周会就直接来找你了,直接说:“哎呀,周会上DBA找我了,说咱们订单组的sql偶尔会超过2s,DBA现在要求优化,平均时间要优化到300ms以下,不过,优化前你要先查下,为什么sql的查询时间会偶尔突增。”


问题排查

然后我们就接下了这个任务,接着,我们就根据DBA给的慢sql,去查这条sql的相关日志,然后结合着监控,最后发现这条sql平常一直很稳定,但是在高峰期的时候,这条sql偶尔花费的时间会超过2s。

此时,我们又查看了一下订单数据库所在物理机的资源占用情况,发现高峰期时,这台物理机的资源占用非常高,CPU和内存占用率都很高,这下基本就确定原因了。

说白了,就是一到高峰期,大量请求跑到MySQL这查询数据,此时就会有大量请求密集请求数据库,然后就会导致数据库所在机器的CPU和内存占用率都飙升,最终就会导致MySQL查询效率极速降低。

leader了解情况后说:“其实数据库查询慢,不一定就是MySQL数据量大导致的,比如当前这个情况,明显是大量请求密集请求数据库,造成数据库负载变大,从而大大降低了数据库的查询效率,这个时候,其实我们就需要在MySQL的前边,加上一层缓存,来进行流量削峰,以保证MySQL能稳定的完成查询”

经过leader一点拨,我们恍然大悟,原来是这样,说白了,这个时候我们可以加一些缓存,来为MySQL进行流量削峰,添加了缓存后的运行流程,大概是这样的:

相关推荐

这招聘环境,35岁的绷不住了。。。

所以大家可以去想一下,甚至去看一下各个大厂的招聘JD,仔细研究一下,是不是会发现其实现在因为程序员太多,岗位不多,所以企业招聘需求是越来越专业化,细分化,精细化,并不是大家想的那样,我只要干过N多年技术,有各种经验就可以随便找工作,这种想法已经过时了,甚至于说跨行的专家他的价值都会锐减,同样是java技术领域的专辑,如果你深耕物流行业多年,但是去干财税系统或者保险系统,你觉得你是不是竞争力就不高了?对30岁以上的 候选人,都希望技术达到专家级,行业积累也达到专家级,来了就可以hold住一大块事情。

石杉的架构笔记 1153

深度拆解,投几百份简历没面试,有offer也降薪?

本文主要是针对最近频繁有人提出的问题做一个深度分析,就是很多人给我们反馈说现在出去找工作,投简历出去几百份,结果都没面试,或者就几个面试,即使拿到offer也都是小公司的,而且一般都是给降薪,问我们这个情况该怎么办。所以我们写了今天的文章来深度分析这个问题,先是分析了一下这个问题的产生原因是什么,为什么会投几百份简历一个面试都没有,然后再是分析了一下具体的解决办法,如何破解这个僵化的情况,里面部分内容和昨天的文章有想通之处,大家可以结合起来一起看,相信对大家找工作会有一定的启发。

石杉的架构笔记 597

老司机经验分享:生产级中间件系统架构设计实践

这篇文章,给大家来聊一个生产级的中间件系统的架构设计实践,希望给对中间件系统感兴趣的同学一点启发。

石杉的架构笔记 3374

面试屡次碰壁后,我是如何调整最终拿下一线大厂offer的?

这篇文章,主要是聊聊很多同学面试过程中都有的一个担心:如果我连续面挂了好几家公司,是不是就代表其他公司就同样拿不到offer了?

石杉的架构笔记 3900

尴尬的面试现场:说说你们系统有多大QPS?系统到底怎么抗住高并发的?

很多好学的同学,都会自己平时研究很多的技术,比如常见的就是买书看书,参加在线培训课程,购买一些知识付费的专栏,或者购买一些视频课程

石杉的架构笔记 6286

面试官问我有没有分布式系统开发经验,我一脸懵圈…

现在有很多Java技术方向的同学在找工作的时候,肯定都会去招聘网站上找职位投递简历。但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设计和开发,具备复杂分布式系统构建经验。

石杉的架构笔记 6125

我用笨办法啃下了一个开源项目的源码!

相信很多同学都希望能够去阅读一些源码来提升自己的技术水平,毕竟在面试的时候,很多大厂都经常会扣到非常深入的底层源码。

石杉的架构笔记 5029

面试官: 你们生产环境的JVM怎么设置的?

这篇文章,给大家聊一个生产环境的实践经验:线上系统部署的时候,JVM堆内存大小是越大越好吗?

石杉的架构笔记 3530

连你女朋友都能看懂的分布式架构原理!

这篇文章聊一个话题:什么是分布式计算系统?现在很多同学经常会看到一些名词,比如分布式服务框架,分布式系统,分布式存储系统,分布式消息系统。

石杉的架构笔记 2573

二本学历5年经验的程序员,出去面试被碾压~

这篇文章,聊一个很多人感兴趣的话题,小公司的Java工程师和大厂Java工程师一起出去求职同一个职位时,前者的竞争力到底差在哪里呢?

石杉的架构笔记 8737

面试官:请设计一个能支撑百万连接的系统架构!

这篇文章,给大家聊一聊:如果你设计一个系统需要支撑百万用户连接,应该如何来设计其高并发请求处理架构?

石杉的架构笔记 5463

面试官让我聊聊 MQ 的数据丢失问题,没想到水这么深。。。

这篇文章,给大家聊一下写入Kafka的数据该如何保证其不丢失?我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了Kafka的核心架构原理。

石杉的架构笔记 1334

35岁高龄程序员的 4 条出路,提早布局,避免出局!

这篇文章,给大家聊聊Java工程师的职业发展规划的一些思考,同时也给不少20多岁、30多岁,但是对自己的职业未来很迷茫的同学一些建议。

石杉的架构笔记 2万+

字节面试官: 让你设计一个MQ每秒要抗几十万并发,怎么做?

Kafka是高吞吐低延迟的高并发、高性能的消息中间件,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。

石杉的架构笔记 7166

面试官问我微服务注册中心如何保证数据强一致性?头秃了。。。

假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相调用。

石杉的架构笔记 4282

程序员别死背面试八股文了,这种面试题才是未来主流。。。

这篇文章简单给大家来聊一个互联网大厂的Java面试题:如果让你设计一个消息中间件,你会怎么做?

石杉的架构笔记 8073

分布式唯一ID的几种生成方案,一次性全掌握!

上一篇文章,我们聊了一下分库分表相关的一些基础知识,这篇文章,我们就接着分库分表的知识,来具体聊一下全局唯一id如何生成。

石杉的架构笔记 1484

用真实业务场景告诉你,高并发下如何设计数据库架构?

这篇文章,我们来聊一下对于一个支撑日活百万用户的高并系统,他的数据库架构应该如何设计?看到这个题目,很多人第一反应就是:分库分表啊!

石杉的架构笔记 2590

程序员不了解这些投简历的巨坑,面试注定一开始就失败!

之前写了两篇文章,给大家介绍了一下如何利用短期的时间,尽可能充分的为面试做准备。这篇文章就给大家聊一个非常关键的问题:如何有策略的投递简历以及如何有策略的进行面试。

石杉的架构笔记 1259

程序员简历上写这种项目,难怪面试当炮灰。。。

这篇文章我们继续来聊一聊,在系统设计和项目经验这两块,应该如何充分的准备,才能拿出有技术含量的项目经验战胜跟你同台竞技的其他工程师,征服你的面试官,收获各种心仪的offer。

石杉的架构笔记 6938

我只是把握好了这3点,1个月后成功拿下大厂offer!

假如你准备在金三银四跳槽的话,那么作为一个Java工程师,应该如何利用1个月的时间,快速的为即将到来的面试进行充分的准备呢?

石杉的架构笔记 972

面试官问我有没有高并发架构经验,我慌的一批…

这篇文章,我们聊聊大量同学问我的一个问题,面试的时候被问到一个让人特别手足无措的问题:你的系统如何支撑高并发?

石杉的架构笔记 1004

Redis事务P0级事故,超卖100瓶茅台,项目组慌的一批!

「关注“石杉的架构笔记”,大厂架构经验倾囊相授」文章来源:【公众号:悟空聊架构】一、前言最近项目的生产环境遇到一个奇怪的问题:现象:每天早上客服人员在后台创建客服事件时,都会创建失败。当我们重启这个微服务后,后台就可以正常创建了客服事件了。到第二天早上又会创建失败,又得重启这个微服务才行。初步排查:创建一个客服事件时,会用到 Redis 的递增操作来生成一个唯一的分布式 ID 作为事件 id。...

石杉的架构笔记 651

什么!作为程序员你连英文版的官方文档都看不懂?

这篇文章,我们来聊一个某种程度上比技术更重要的话题:一个英语比较渣的程序员,到底应该如何做,才能达到无障碍阅读英文官方文档呢

石杉的架构笔记 1478

聊聊八卦,当年的顶流明星事件是如何把公司的缓存架构“击垮”的?

这篇文章,咱们来聊聊热点缓存的架构优化问题。其实使用缓存集群的时候,最怕的就是热key、大value这两种情况,那啥叫热key大value呢?

石杉的架构笔记 631

看似简单的 Java Bean 转 Map 业务场景,没想到把队友坑了!

「关注“石杉的架构笔记”,大厂架构经验倾囊相授」文章来源:https://juejin.cn/post/7118073840999071751一、背景有些业务场景下需要将 Java Bean 转成 Map 再使用。本以为很简单场景,但是坑很多。二、那些坑2.0 测试对象importlombok.Data;importjava.util.Date;@Datapublicclass...

石杉的架构笔记 572

太强了!这么设计中间件完美解决了百万并发的问题!

很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识。比如volatile、Atomic、synchronized底层、读写锁、AQS、并发包下的集合类、线程池,等等

石杉的架构笔记 1292

七种分布式系统的解决方案,一次性讲给你听!

虽然定位是有“分布式”、“容错架构”等看起来略显复杂的字眼,但是咱们还是按照老规矩:大白话 + 手绘数张彩图,逐步递进,让每个同学都能看懂这种复杂架构的设计思想。

石杉的架构笔记 1946

如果我是核酸系统架构师,我会这么用MQ。。。

如果投递出去的消息在网络传输过程中丢失,或者在RabbitMQ的内存中还没写入磁盘的时候宕机,都会导致生产端投递到MQ的数据丢失

石杉的架构笔记 6072

MyBatis-Plus 不支持联表?一个依赖轻松搞定

「关注“石杉的架构笔记”,大厂架构经验倾囊相授」文章来源:【公众号:一行Java】前言MyBatis-Plus 不支持联表,遇到复杂查询依然还是麻烦,怎么办?MyBatis-Plus 要想实现联表查询,只需要引入一个依赖mybatis-plus-join,就能完美解决。准备本文,需要你对 MyBatis-Plus 有一定的了解~“示例源码地址:https://github.com/vehan...

石杉的架构笔记 1950
上一篇: 面试官问我MySQL索引失效怎么排查?懵逼了。。。
下一篇: SQL优化实战:如何通过读写分离对千万级数据量查询进行优化?
石杉的架构笔记
石杉的架构笔记 苏州莫普迪拉官方账号 苏州莫普迪拉官方账号
博客等级 码龄8年 4823粉丝 322原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值