如何定位慢查询

xiaojiuaigc@163.com 发布于 2024-11-03 397 次阅读


方案1:使用开源的工具skyworking等工具

Skywalking:

我们当时做压测的时候有的接口非常的慢,接口的响应时间超过了2秒以上,因为我们当时的系统部署了运维的监控系统Skywaking,在展示的报表中可以看到是哪一个接口比较慢,并且可以分析这个接口哪部分比较慢,这里可以看到SQL的具体的执行时间,所以可以定位是哪个sg!出了问题

方案2:使用mysq自带的慢日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志

如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log。

我的网站在最开始做统计访问人数的时候为了方便快捷就使用了一个插件统计Jetpack

这是其中的一些日志

可以看到有些查询很慢甚至达到了18秒

之所以查询这么慢是因为

  1. 表锁竞争:多个查询同时访问同一个表,导致锁竞争。
  2. 索引缺失或不优化:wp_options表上的索引可能不够优化,导致查询效率低下。
  3. 高并发:系统在高并发情况下,可能会出现资源争用,导致查询变慢。
  4. 表碎片:表中的数据碎片可能导致查询性能下降

这还导致服务器负载cpu使用率飙增我数据库挂了三次

所以后面统计访问次数就自己搞了