数据库查询慢可能有哪些原因引起?

以下只是我针对数据库查询慢这个问题想到的可能的原因和一些解决办法的简单罗列,每一个问题和解决办法都可以详细描述很多,后面的再针对每一个点进行谈论

 

一、应用的问题

  1. 数据库表设计不合理,应该加索引的字段没有加索引
  2. 查询sql语句是不是编写不合理,查询的时候没有加索引
  3. 查询sql语句的条件加了索引,但是查询的时候没有命中索引,比如:前缀匹配失效、条件字段做了类型转换或者使用了函数、使用了范围查询等;使用 explain 查看索引命中情况 ;参考
  4. join的表太多了???
  5. 数据库中的单表的数据量达到了多少?1000万?5000万?是不是考虑分库分表;参考
    1. 分库分表怎么选取分片键?
    2. 分库分表后怎么查询?
    3. 分库分表的算法?一致性hash环?
    4. 分库分表的节点个数怎么考虑
  6. 程序异常导致大量数据库连接不能释放,一直被占用?

二、数据库的问题

  1. 参数优化,连接池资源不够用了
  2. 数据库所在的硬件资源情况:当查询慢的时候,内存占了多少?mysql磁盘IO是不是被其它应用共享且占用高?cpu是不是有负载?
    1. 硬件资源本身不够>加资源
    2. 硬件资源因为和其它进程共享,导致资源不够,可以考虑做资源隔离
    3. 硬件资源性能不足,比如磁盘可以考虑换成SSD
  3. 网络资源
    1. 应用连接数据库的网络是不是抖动,延时较高

三、请求量太大

  1. 如果数据量真的炒鸡大,分库分表已经不能满足查询了,考虑将热点数据在redis做缓存
    1. 应用架构调整,把缓存模块加进去
    2. 如果已经加了缓存还是慢,会不会是缓存雪崩了?击穿了?缓存命中率低?
  2. 缓存任然不能满足查询要求,比如很多字段的查询,可以将查询字段放到ES等大数据组件中,先查ES,ES拿到数据主键id再到MySQL中查询
  3. 用户请求突然增加,导致查询变慢
    1. 上有系统出现bug,导致循环调用接口做查询,这个时候是不是考虑异常情况限流
    2. 用户请求真的是大量增加了,公司发展迅猛

 

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
服务器返回过可能是由以下多种原因引起的: 1. 网络带宽受限:服务器的网络带宽受限,导致数据传输速度变。这可能是由于服务器所在地区的网络状况不佳,或者是过多用户同时请求服务器造成的。 2. 服务器硬件性能不足:服务器硬件性能不足,导致处理请求的速度变。这可能是由于服务器的CPU、内存、硬盘等硬件配置过低,无法支持高并发请求。 3. 数据库响应:如果请求需要访问数据库,而数据库响应,也会导致服务器返回过。 4. 程序设计不合理:程序设计不合理,比如代码中存在死循环、重复计算等缺陷,也可能导致服务器返回过。 5. 服务器负载过高:如果服务器负载过高,处理请求的速度也会变。这可能是由于服务器同时处理了过多的请求,或者是某些请求需要消耗过多的服务器资源,导致其他请求的处理速度变。 针对以上原因,可以采取以下措施进行优化: 1. 增加服务器带宽:增加服务器带宽,可以提高网络传输速度,缩短服务器返回时间。 2. 更新服务器硬件:更新服务器硬件,提高服务器性能,可以支持更高并发的请求,提高响应速度。 3. 优化数据库查询:优化数据库查询语句,增加索引等方式,可以提高数据库查询速度,缩短服务器返回时间。 4. 优化程序设计:优化代码,减少重复计算、死循环等缺陷,提高程序执行效率,缩短服务器返回时间。 5. 负载均衡:使用负载均衡技术,将请求分流到多台服务器上,可以避免单个服务器负载过高,提高整个系统的响应速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值