mysql慢查询必须知道的事儿

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 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的文件的代码审查,合理控制连接池大小

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
缓存 关系型数据库 MySQL
MySQL慢查询优化策略
MySQL慢查询优化是一个复杂的过程,需要根据具体的应用场景和数据特点进行。以上策略是提升数据库查询性能的有效途径,但最关键的是对系统进行持续的监控和分析,及时发现并解决性能瓶颈。通过实践这些策略,你可以显著提高MySQL数据库的性能,为用户提供更快的响应时间和更好的体验。
355 10
|
3月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
4月前
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
166 0
|
4月前
|
SQL 监控 关系型数据库
MySQL慢查询攻略
本文详细介绍了MySQL慢查询优化的全流程,从定位性能瓶颈到具体优化策略,再到高级调优与预防监控。首先通过开启慢查询日志和分析工具(如pt-query-digest)找到问题SQL,接着从索引优化(如最左前缀原则、覆盖索引)、SQL语句重构(如避免全表扫描)及EXPLAIN执行计划解析等方面进行核心优化。随后深入参数调优和架构升级,如调整innodb_buffer_pool_size、实施分库分表等。最后,通过实时监控工具(如PMM、Prometheus+Grafana)建立长效机制,并以电商订单查询为例,展示优化前后性能大幅提升的实战效果。
435 0
|
11月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
9月前
|
关系型数据库 MySQL 数据库
mysql慢查询每日汇报与分析
通过启用慢查询日志、提取和分析慢查询日志,可以有效识别和优化数据库中的性能瓶颈。结合适当的自动化工具和优化措施,可以显著提高MySQL数据库的性能和稳定性。希望本文的详解和示例能够为数据库管理人员提供有价值的参考,帮助实现高效的数据库管理。
219 11
|
10月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
259 18
|
11月前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
10月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
761 7
|
10月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
552 5

推荐镜像

更多