目录

如何定位慢查询?

解决方案

方案1:使用开源工具

方案2:Mysql自带的慢日志(测试阶段)

如何定位慢查询?

解决方案

方案1:使用开源工具

方案2:Mysql自带的慢日志(测试阶段)

回答

怎么分析慢查询?

回答


如何定位慢查询?

慢查询可能出现的情况:

页面加载过慢、接口压测响应时间过长(超过1s)

1.聚合查询

2.多表查询

3.表数据量过大查询

4.深度分页查询

解决方案

方案1:使用开源工具

调试工具:Arthas

运维工具:Prometheus、Skywalking

方案2:Mysql自带的慢日志(测试阶段)

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

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

#开启Mysql慢日志查询开关
slow_query_log=1
#设置慢日志的时间为2秒,SQL语句查询超过2秒,就会被视为慢查询,记录到慢查询日志当中
long_query_time=2

配置完成之后,重新启动Mysql服务器就行测试,查看慢日志文件当中记录的信息

如何定位慢查询?

慢查询可能出现的情况:

页面加载过慢、接口压测响应时间过长(超过1s)

1.聚合查询

2.多表查询

3.表数据量过大查询

4.深度分页查询

解决方案

方案1:使用开源工具

调试工具:Arthas

运维工具:Prometheus、Skywalking

方案2:Mysql自带的慢日志(测试阶段)

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

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

#开启Mysql慢日志查询开关
slow_query_log=1
#设置慢日志的时间为2秒,SQL语句查询超过2秒,就会被视为慢查询,记录到慢查询日志当中
long_query_time=2

配置完成之后,重新启动Mysql服务器就行测试,查看慢日志文件当中记录的信息

慢日志功能在生产环境中不会开启,因为会损耗一些Mysql的性能。

回答

我们当时做测试的时候有的接口响应很慢,时间超过了两秒,因为是调试阶段,我们开启了Mysql的慢日志,当时在配置文件中配置的是SQL执行时间超过两秒就记录到慢日志文件当中,然后我们就可以在日志文件中找到执行比较慢的sql了

怎么分析慢查询?

可以采用EXPLAIN或者DESC命令获取Mysql如何执行SELECT语句的信息

几个关键的字段

possible_key:当前sql可能会使用到的索引

key:当前sql实际命中的索引

key_len:索引占用的大小

通过key和key_len来查看是否可能命中索引

Extra:额外的优化建议

type:这条sql连接的类型,性能由好到坏排列为:NULL、system、const、eq_ref、ref、range、index、all

NULL:查询未使用到表(开发中少见)

system:查询系统中的表

const:根据主键查询

eq_ref:主键索引查询或唯一索引查询

ref:索引查询

ranger:范围查询

index:索引树扫描

all:全盘扫描

在开发过程中,尽量不要有all或者index,如果有的话,这条sql就需要优化

回答

如果一条sql执行慢的话,我们通常可以使用mysql自带的执行计划explain来去查看这条sql的执行情况,比如在这里面可以通过key和len_key检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效的情况,第二个,可以通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或者全盘扫描,第三给可以通过extra建议来判断,是否出现了回表的情况,如果出现了就可以尝试添加索引或者修改返回字段来修复。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐