MySQL慢查询优化
MySQL慢查询优化
一、慢查询开启
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
查看参数配置情况:
show variables like 'slow_query_log%';
1. 全局变量设置
set global slow_query_log='ON';
2. 配置文件设置
[mysqld]
slow_query_log = ON
3. 日志分析工具
生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,这个时候就需要日志分析工具。
1)mysqldumpslow
这是MySQL自带的工具,主要作用是对 MySQL 的慢查询日志进行分析,并输出查询统计信息。它根据日志中的 SQL 语句进行汇总,展示出哪些查询的执行时间最长、执行次数最多,或者是可能存在优化空间的查询。
2. pt-query-digest
它可以从logs、processlist、和 tcpdump来分析 MySQL 的状况,logs包括 slow log、general log、binlog。也可以把分析结果输出到文件中,或则把文件写到表中。分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
二、慢sql优化思路
1. 优化索引
通过explain去分析索引
比如不加索引,索引不生效、不合理等,这时候,我们可以优化索引
2. sql 语句
- 避免select *,只取所需列
- 分页查询,一次查询数据不要过多,offset limit
- 深度分页的问题,考虑基于主键去分页
- 事务粒度
3. 分库分表
单表数据量过大的情况下,考虑分库分表
也可以考虑将将部分数据归档
4. 数据库连接池
根据应用的负载情况,合理增加数据库并发连接数
5. 分担查询压力
1)改用ES查询
2)使用redis缓存

浙公网安备 33010602011771号