赞
踩
执行SQL响应比较慢,你有哪些排查思路?
如果执行SQL响应比较慢,我觉得可能有以下4个原因:
第1种情况:索引失效或者没有没有索引的情况
首先,可以打开MySQL的慢查询日志,收集一段时间的慢查询日志内容,然后找出耗时最长的SQL语句,对这些SQL语句进行分析。
比如可以利用执行计划explain去查看SQL是否有命中索引
。如果发现慢查询的SQL没有命中索引,可以尝试去优化这些SQL语句,保证SQL走索引执行
。如果SQL结构没有办法优化的话,可以考虑在表上再添加对应的索引
。我们在优化SQL或者是添加索引的时候,都需要符合最左匹配原则。
第2种情况:单表数据量数据过多,导致查询瓶颈的情况。
即使SQL语句走了索引,表现性能也不会特别好。这个时候我们需要考虑对表进行```切分``。表切分规则一般分为两种,一种是水平切分,一种是垂直切分。
业务主键
切分为多张小表,这些小表可能达到100张甚至1000张。业务逻辑
把关联性比较大的列放到同一张表中去。第3种情况:网络原因或者机器负载过高的情况,我们可以进行读写分离
比如MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。
第4种情况:热点数据导致单点负载不均衡的情况。
这种情况下,除了对数据库本身的调整以外,还可以增加缓存
。将查询比较频繁的热点数据预存到缓存当中,比如Redis、MongoDB、ES等,以此来缓解数据的压力,从而提高数据库的响应速度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。