慢查询定位具体 SQL 语句|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习慢查询定位具体 SQL 语句

开发者学堂课程【MySQL 实操课程:慢查询定位具体 SQL 语句】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/717/detail/12829


慢查询定位具体 SQL 语句

 

内容介绍

一、MySQL 客户端慢查询定位

二、RDS 管理后台慢查询定位

 

接下来进行讲解第二部分的内容,如何通过慢查询定位找到 SQL 语句,本身MySQL 也提供了这样的机制去配置慢查询策略,下面进行讲解慢查询是什么和如何去定位。

 

一、MySQL 客户端慢查询定位

1、定位慢查询

(1)慢查询意在将SQL执行时间超过预设的阈值,会被记录下来。

(2)MySQL 查看慢查询参数配置。

(3)RDS For MySQL 提供了可视化的参数修改方式。

(4)为了方便看到慢查询效果,将该值调整了0.0001

就是说对于所有的 SQL 语句,在执行增删改查的过程中可以通过 MySQL 的配置时间,比如配置为一秒那么,所有超过一秒的时间就会写入慢查询,便于后续去跟踪分析慢查询全日志文件,通过慢查询日志文件,可以快速的定位找到对应 SQL 语句,然后针对 SQL 语句进行,详细的分析优化,这就是慢查询为什么要去进行定位的作用。

2、案例演示

那么通过 MySQL 怎样去进行一个慢查询的配置,如下:

mysql> show variables like '%long_query_time%' ;  //这是一个系统变量

Variable name       Value

long_ query_ time  1.000000

1 row in set (0.00 sec)

首先打开阿里云工具,然后远程登录服务器找到公网的 ip:

shell@Alicloud:~$ ssh root@47.112.159.55

[root@iZwz9bize6nk8hug8jOvywZ ~]# ps -ef|grep mysqld

此时 mysql 服务已经启动。然后进入到 MySQL 的客户端,然后找到变量long_query_time,可以看到阙值设定为0.5

[root@iZwz9bize6nk8hug8jOvywZ ~]# /usr/local/mysql/bin/mysql -uroot -p

mysql> show variables like '%long_query_time%' ;

long_query_time   0.500000

对于是在哪里配置的,可以重新打开一个客户端,打开 MySQL 的配置文件,可以看到 slow 实际上是启动了慢查询日志的,并且指定了慢查询日志,慢查询时间为0.5秒

shell@Alicloud:~$ ssh root@47.112.159.55

[root@iZwz9bize6nk8hug8jOvywZ ~]# vi /etc/my.cnf

slow_query_log=1

slow_query_log_file=/data/mysql/slow.log

log-error=/data/mysql/error.log

long_query_time=0.5

然后进行查看慢查询的日志,可以看到之前建立的查询日志 slow.log:

[root@iZwz9bize6nk8hug8jOvywZ ~]# cd /data/mysql

[root@iZwz9bize6nk8hug8jOvywZ mysql]# ll

-rw-r----- 1 mysql mysql  736 Aug 21 01:25 slow.log


开后可以看到内容为之前建立连接生成的慢查询,为了方便测试可以把时间改小一点,首先先删除之前的 slow 日志,然后将阙值设置为0.001,改完配置后保存退出进行重启,重启之后再进行打开:

[root@iZwz9bize6nk8hug8jOvywZ mysql]# vi slow.log

[root@iZwz9bize6nk8hug8jOvywZ mysql]# rm -rf slow.log

[root@iZwz9bize6nk8hug8jOvywZ mysql]# vi slow.log

long_query_time=0.001

[root@iZwz9bize6nk8hug8jOvywZ mysql]# usr/local/ mysql/bin/mysqladmin shutdown -uroot -p

[root@iZwz9bize6nk8hug8jOvywZ mysql]# /usr/local/mysql/bin/mysqld_safe /etc/my. cnf&

[root@iZwz9bize6nk8hug8jOvywZ mysql]# ps -ef|grep mysqld

此时再去执行系统变量,则会看到时间为0.001秒,此时慢查询日志已经生成,然后进入 MySQL 找到慢查询日志 slow.log,打开后发现 show databases 表示做了慢查询,并将所有慢查询语句写入到日志中:

mysql> show variables like '%long_query_time%' ;

long_query_time   0.001000

[root@iZwz9bize6nk8hug8jOvywZ mysql]# vi slow.log

show databases

打开 user 表可以看到表中存在之前创建的索引,进行后执行 begin 开启一个事务,然后重新打开一个窗口进行执行,再向 user 表中写入数据可以发现被阻塞,写入失败因为超时:

mysql> select * from user;

mysql> show create table user;

mysql>begin;

shell@Alicloud:~$ ssh root@47.112.159.55

[root@iZwz9bize6nk8hug8jOvywZ ~]# /usr/local/mysql/bin/mysql -uroot -p

mysql> use aliyun;

mysql> select * from user;

update user set  name= 'wangwu1' where score=90;

mysql> begin;

mysql> update user set  name= 'wangwu1' where score=90;

Query OK,1 row affected (0.00 sec)

Bows matched:1 Charged:1 Warnings:0

mysql> commit;

再打开日志文件,可以看到里面的数据重新打印出来,commit 操作也可以检测出慢查询:

[root@iZwz9bize6nk8hug8jOvywZ mysql]# tail -f -n 100 slow.log

commit;

所以这个里面是会记录出慢查询,也就是可以写入一些模拟数据,去执行慢查询,这里面的 commit 也是记录下了慢查询语句,正常的话是直接执行:

mysql> rollback;

Query OK,0 row affected (0.00 sec)

这就是针对慢查询检测的方法,需要注意要开启 cnf 配置的 slow_query_log=1 慢查询,并且要指定 file 文件是 slow.log 和慢查询时间为多少。

 

二、RDS 管理后台慢查询定位

1、后台慢日志操作

rds 实际上也提供了一些管理平台,下面讲解 rds 如何进行的操作。首先进入到 rds管理控制平台,然后找到参数设置找到 lang_query_time,可以进行修改:

图片1.png

而把鼠标放到 long_query_time 提示符上,可以看到提示作用为找到慢查询语句并且写到文件中:

图片2.png

然后修改值为0.1,点击提交参数并确认:

修改后进行刷新,可以发现时间变为0.1,说明修改成功,那么到底有没有修改成功?那么可以通过公网 IP 进入另一个客户端,然后连接 rds 里面的实例信息进行查看:

shell@Alicloud:~$ ssh root@47.112.159.55

[root@iZwz9bize6nk8hug8jOvywZ ~]# /usr/ local/ mysql/bin/mysql -hrm-wz9c2e2q42u426f3z.mysql .rds .aliyuncs.com -uroot -p

mysql> show variables like '%long_query_time%' ;

long_query_time   0. 100000

可以看到时间为0.1秒,说明上面的已经生效。时间是可以修改的,改完后可以通过他的慢查询日志设置的值,可以去分析并且收集慢查询日志,这就是 rds 下面提供的可视化修改参数。

2、慢日志统计

RDS For MySQL 管理后台,可到慢日志统计情况。在制备服务的功能下找到慢SQL,找到后可以根据慢 SQL 语句进行优化,这个慢 SQL 也是在之前配置了查询时间之后,超过这个时间的被统计出来的 SQL,包括打印出 SQL 模板和库名等一系列信息:

图片3.png

3、慢日志明晰

RDS For MySQL 管理后台,点击优化后就可以进入到优化的界面,即慢日志明细面板,优化界面中会列出明细,这就是所说的如何去定位:

图片4.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
2月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
2月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
6月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
10月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
3315 11
|
12月前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
965 1
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
420 0
|
Java Apache Android开发
Struts 2的秘密武器:揭秘社区中隐藏的学习宝藏,让你从新手到高手的不归路!
【8月更文挑战第31天】Struts 2学习资源丰富,除官方文档外,TutorialsPoint和W3Schools等网站提供详尽教程;《Apache Struts 2实战》等书籍含全面实例。Udemy、Pluralsight及YouTube上视频课程众多,Apache Software Foundation亦有网络研讨会。实践方面,GitHub上的开源项目及个人小项目都是好选择。寻求帮助可访问Apache官方论坛、Stack Overflow等平台。
118 0
|
SQL 监控 关系型数据库
"SQL性能瓶颈大揭秘:一步步教你揪出慢查询元凶,从根源解决数据库拖沓问题,让应用速度飞起来!"
【8月更文挑战第31天】作为一名数据库管理员或开发者,面对复杂系统时,运行缓慢的SQL查询常常令人头疼。本文将指导你如何诊断并解决这些问题。首先,通过性能监控工具识别出问题查询;其次,利用`EXPLAIN`分析其执行计划,了解索引使用情况;接着,优化查询语句,如使用合适索引、减少JOIN操作等;再者,优化数据库设计,采用分区表或调整硬件资源;最后,持续监控性能并调优。通过这些步骤,可有效提升数据库的整体性能。
422 0