当前位置:网站首页>执行SQL响应比较慢,你有哪些排查思路?
执行SQL响应比较慢,你有哪些排查思路?
2022-06-25 04:01:00 【Tom弹架构】
需要完整版面试文档可扫描文章底部二维码领取!
如果面试问你,执行SQL响应慢,你有哪些排查思路和解决方案?这是一位去某里面试的小伙伴跟我分享的面试真题,那今天我给大家来分享一下我的思路。
1、排查思路
如果执行SQL响应比较慢,我觉得可能有以下4个原因:

第1个原因:没有索引或者 导致索引失效。
第2个原因:单表数据量数据过多,导致查询瓶颈
第3个原因:网络原因或者机器负载过高。
第4个原因:热点数据导致单点负载不均衡。
接下来,我针对以上几种情况,分别来聊一聊我的解决方案。
2、解决方案
第1种情况:索引失效或者没有没有索引的情况
首先,可以打开MySQL的慢查询日志,收集一段时间的慢查询日志内容,然后找出耗时最长的SQL语句,对这些SQL语句进行分析。

比如可以利用执行计划explain去查看SQL是否有命中索引。如果发现慢查询的SQL没有命中索引,可以尝试去优化这些SQL语句,保证SQL走索引执行。如果SQL结构没有办法优化的话,可以考虑在表上再添加对应的索引。我们在优化SQL或者是添加索引的时候,都需要符合最左匹配原则。
第2种情况:单表数据量数据过多,导致查询瓶颈的情况。即使SQL语句走了索引,表现性能也不会特别好。这个时候我们需要考虑对表进行切分。表切分规则一般分为两种,一种是水平切分,一种是垂直切分。
水平切分的意思是把一张数据行数达到千万级别的大表,按照业务主键切分为多张小表,这些小表可能达到100张甚至1000张。

那垂直切分的意思是,将一张单表中的多个列,按照业务逻辑把关联性比较大的列放到同一张表中去。

除了这种分表之外,我们还可以分库,

比如我们已经拆分完1000表,然后,把后缀为0-100的表放到同一个数据库实例中,然后,100-200的表放到另一个数据库实例中,依此类推把1000表存放到10个数据库实例中。这样的话,我们就可以根据业务主键把请求路由到不同数据库实例,从而让每一个数据库实例承担的流量比较小,达到提高数据库性能的目的。
第3种情况:网络原因或者机器负载过高的情况,我们可以进行读写分离.

比如MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。
第4种情况:热点数据导致单点负载不均衡的情况。

这种情况下,除了对数据库本身的调整以外,还可以增加缓存。将查询比较频繁的热点数据预存到缓存当中,比如Redis、MongoDB、ES等,以此来缓解数据的压力,从而提高数据库的响应速度。
以上就是我对执行SQL响应慢的排查思路和解决方案的理解,希望能够帮助到大家。关注我,面试不再难!
关注微信公众号『 Tom弹架构 』回复“666”可获取200页的pdf格式文档(附赠10万字大厂内部面试资料)。感谢您的支持!

也可扫描下方二维码+\/免费领取完整版!
↓ ↓ ↓ ↓ ↓
边栏推荐
- GbASE 8s中的Blob 页(Blobspace page)
- mongodb集群
- 什么是数据持久化?
- 【esp32学习之路6——flash加密】
- 微信小程序父子组件之间传值
- Upgrade PHP to php7 The impact of X (2), the obsolescence of mcrypt decryption
- GBASE 8s存储过程语法结构
- Paper notes: multi label learning ESMC (I don't understand it, but I haven't written it yet, so I'll put it here for a place temporarily)
- Vscode 设置clang-format
- 2021.8.29 notes: register, bit operation, pointer, structure
猜你喜欢

为什么TCP握手刚刚好是3次呢?

大话云原生数据库中的存算分离

Upgrade PHP to php7 The impact of X (I). The problem of session retention. Keep login

Gbase 8s overall architecture

Gbase 8s index b+ tree

JS' sort() function

30岁了开始自学编程,家里比较困难还来得及吗?

Code scanning payment flow chart of Alipay payment function developed by PHP

js的sort()函数

Concat() in JS
随机推荐
Use of deferred environment variable in gbase 8s
CTF_ Web: how to recognize and evaluate a regular expression
Retrofit 源码分析
Le chemin de l'apprentissage immutable - - Adieu à la copie traditionnelle
CTF_ Web: Advanced questions of attack and defense world expert zone WP (15-18)
Codeforces Round #802 (Div. 2) C D
GbASE 8s中的Blob 页(Blobspace page)
File upload vulnerability shooting range upload labs learning (pass1-pass5)
机器学习深度学习——向量化
STM32的DMA双缓冲模式详解
OOP栈类模板(模板+DS)
GBASE 8s的数据视图
论文笔记: 多标签学习 ESMC (没看懂, 还没写出来, 暂时放这里占个位置)
CTF_ Web: Learn flask template injection (SSTI) from 0
关于TCP连接三次握手的详细总结
《牛客刷verilog》Part I Verilog快速入门
GBASE 8s存储过程执行和删除
WPF 使用 MAUI 的自绘制逻辑
PHP encapsulates curl to send get and post request methods, and uses
PostgreSQL数据库WAL——RM_HEAP_ID日志记录动作