Java教程

执行数据库响应较慢(排查思路和解决方案)

本文主要是介绍执行数据库响应较慢(排查思路和解决方案),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

可能有以下4个原因(排查思路)

1.没有索引或者SQL没有命中索引导致索引失效

2.单表数据量过多,导致查询遇到瓶颈。

3.网络原因或者机器自身负载过高

4.热点数据导致单点负载不均衡

解决方案

1.没有索引或者SQL没有命中索引导致索引失效

我们可以打开MySQL的慢查询日志,收集一段时间的慢查询,找出耗时最长的SQL语句,对SQL语句再进行分析,比如可以利用执行计划explain,去查询SQL是否命中索引,如果发现慢查询没有命中索引的话,可以尝试去优化SQL语句,保证SQL去走索引执行,如果说SQL语句的结构没有办法再优化的话,我们可以再考虑在表上再增加对应的索引,我们在优化或者是添加索引的时候,需要符合最左匹配原则。

2.单表数据量过多,导致查询遇到瓶颈。

即使SQL语句走了索引,表现性能也不是特别好,我们需要考虑对表进行切分,那么表切分分为两种一种是水平切分,一种是垂直切分

水平切分就是把一张表行数达到千万级别的大表,根据业务主键切分为多张小表,这些小表可能达到100张,甚至1000张,

垂直切分就是将一张单表中的多个列按照业务逻辑把它关联性比较大的列放在同一张表上去,

除了分表还可以进行分库,已经拆分完1000张表之后,然后将后缀为0-100的表放到数据库实例中,然后再将100-200的表放到另一个数据库实例中,依次类推把1000张表分别放到了10个数据库实例中,这样就可以根据业务的主键把请求路由到不同的这个数据库实例,然后让数据库实例承担相对应的流量,这样均摊的流量就比较小,从而达到一个数据库性能提升的目的。

3.网络原因或者机器自身负载过高

我们可以进行读写分离MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写的操作,多个从库只用来处理读的操作,在流量比较大的场景中可以增加从库来提高数据库的负载均衡能力,从而提升数据库的总体性能

4.热点数据导致单点负载不均衡

除了对数据库本身的调度以外,还可以增加缓存,然后将查询比较频繁的热点数据存放到缓存中redis MongoDB,ES等等。以此来缓解数据库的压力,从而提高数据库的响应速度。

 

这篇关于执行数据库响应较慢(排查思路和解决方案)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!