mysql慢查询必须知道的事儿

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mysql慢查询必须知道的事儿

mysql慢查询日志配置及查看


查看哪些经常在链接mysql服务器:

SHOW PROCESSLIST;

查询慢查询是否开启及慢查询日志目录:

show variables like 'slow_query%';

slow_query_log:OFF为关闭 ON为开启

slow_query_log_file:慢查询日志存放目录


image.png


配置慢查询日志开启相关参数


在 [mysqld] 增加如下参数

slow_query_log = 1
# 日志超时时间
long_query_time = 1
# 日志存放目录
slow_query_log_file = /data/mysql/logs/mysql-query.log


mysql慢查询日志分片

1. 编写脚本cut_mysql_slow_log.sh

#!/bin/bash
# 定时切割mysql的慢查询日志
slowlog=/data/mysql/logs/mysql-query.log
mv $slowlog /data/mysql/logs/mysql-query.`date +%Y%m%d%H`.log
mysqladmin -uroot -ppassword flush-logs
find /data/mysql/logs/mysql-query.log -type f -mtime +30 -exec rm {} \; > /dev/null 2>&1


2. linux定时任务进行定时日志分片


crontab -e

59 23 * * * /路径/cut_mysql_slow_log.sh


3. 日志分片注意点


Linux 日志目录必须所述组为 mysql 不然日志写入可能有问题


mysql执行计划参数分析

执行计划查看:在查询sql前加 explain

explain select * from message_info where msg_no='10001000';



image.png


执行计划参数分析


select_type:查询类型
    SIMPLE:简单表 ,不使用表链接或者子查询
    PRIMARY :主查询,即外层查询
    UNION :后面的查询语句
    SUBQUERY :子查询中第一个
table: 输出结果的表别名
type: 访问类型
    const/system:主键索引或者唯一索引
    eq_ref:唯一索引扫描
    ref:非唯一索引扫描
    range: 索引范围扫描(where 后面是 between and 或 <或 > 或 >= 或 <=或 in 这些)
    index:索引全表扫描
    all:扫描整表
possible_key: 表示查询可能用到的索引
key:实际用到的索引
key_len:索引字段的长度
ref:使用哪个列与key从表中选择行
rows:需要进行扫描表的行数
filtered:存储引擎返回数据在server层过滤后,剩下多少满足查询数量的百分比
Extra:执行计划的说明和描述
    Using Index :表示索引覆盖,不会回表查询
    Using Where :表示进行了回表查询
    Using Index Condition :表示进行了ICP优化
    Using Flesort :额外操作,不能通过索引顺序达到排序效果


mysql解决慢查询方式

1. 定时统计慢查询sql,进行监控报警等操作

2. 根据sql的执行计划来优化,比如增加索引 修改不合理的索引

3. 进行分表,数据量比较大的表进行拆表,如根据“年”“月”等进行分片

4. 增加备库,如业务支撑系统有大量数据统计在备库操作,不影响主库的写入

5. 根据业务合理优化表结构,团队内部要有sql编写的标准(如 xml里面禁止写 * 查询、查询只查询有用的字段等)

6. 对并发要求特别高的时候,可以采用中间件实现分库分表(如 shardingjdbc、mycat 等) 来实现mysql服务器高可用解决方案


java应用慢查询解决方式

1. 对于热点数据或者经常查询的数据,进行缓存中间件(如redis)进行缓存操作,减少数据库连接池操作

2. 定期进行sql的文件的代码审查,合理控制连接池大小

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 监控 关系型数据库
深入理解MySQL日志:通用查询、慢查询和错误日志详解
深入理解MySQL日志:通用查询、慢查询和错误日志详解
1558 0
|
关系型数据库 MySQL 索引
mysql之开启慢查询日志
mysql之开启慢查询日志
|
SQL 监控 关系型数据库
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
1468 0
|
21天前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
|
7月前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
281 1
|
4月前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
368 1
|
4月前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
110 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL——开启慢查询
MySQL——开启慢查询
38 0
|
6月前
|
SQL 缓存 关系型数据库
MySQL慢查询优化实践问答
MySQL慢查询优化实践问答
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
68 2