MySQL慢查询
快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
MySQL慢查询
MySQL 慢查询是指查询语句执行速度过慢,影响系统整体性能和查询效率的情况。MySQL 提供了慢查询日志来记录执行时间超过特定阈值(slow_query_log_time)的查询语句,可以通过分析慢查询日志找出查询语句执行缓慢的原因并进行优化。
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过设定时间的语句
慢查询开启方法
命令开启
特点:只对当此数据库运行生效,一旦数据库重启便失效
-- 1.查询当前数据库是否开启慢查询
mysql> show variables like "%slow%";
mysql> show variables like "%long%";
-- 2.修改慢查询阈值时间
mysql> set global long_query_time=2; #将阈值时间改为2s,修改完成后由于刷新时间不确定需要重新登录查看
-- 3.开启慢查询
mysql> set global slow_query_log='ON';
-- 4.重新查看慢查询信息,验证是否开启
-- 5.查看sql日志记录是否开启
mysql>show variables like "%general_log%";
-- 6.开启sql日志记录,会将所有sql记录在指定位置
mysql>set global general_log='ON';
至此开启慢查询,当某个sql执行时间超过了指定阈值时间,将会记录到慢查询日志中
注意:
general_log的sql记录会记录所有的sql,日志量极大,日常一般只开启慢查询不开启sql日志记录,
只有当发现数据库异常(比如已经有慢查询产生)才会临时开启,以便完整掌握数据库信息
修改配置文件开启
特点:通过配置/etc/my.cnf配置文件开启,开启永久生效
# 打开mysql的配置文件 /etc/my.cnf 添加如下信息
slow_query_log=1 #设置开启慢查询 值可以为1也可以为ON
slow_query_log_file=/opt/liuyh/log/mysql/mysql-slow.log #设置慢查询日志位置,保证数据库所在用户拥有该位置权限
long_query_time=3 #设置慢查询阈值时间,单位s
此处配置如果不生效,需要在log下面手动创建mysql目录,并将mysql的属主属组给到mysql用户(chown -R mysql:mysql mysql)
慢查询优化
以下是一些常见的优化方法:
- 创建索引:通过创建合适的索引来加速查询。可以使用 EXPLAIN 命令来查看查询语句的执行计划,从而判断是否需要创建索引。
- 优化查询语句:写出性能更好的查询语句,避免使用子查询、嵌套查询、多表连接等复杂语句,尽量减少跨表查询。
- 分析表结构:合理设计表结构,尽量减少字段数量、使用合适的数据类型、避免使用大字段等。
- 调整 MySQL 配置:根据系统负载和硬件配置,调整 MySQL 的配置参数,如调整缓存大小、最大连接数、并发连接数等。
- 使用缓存:使用缓存技术来减少对数据库的查询次数,如使用 Memcached、Redis 等缓存系统来缓存热点数据。