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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习慢查询定位具体 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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
因为一条SQL慢查询的思考
本文探讨了MySQL中的慢查询问题,包括定义(执行时间过长的SQL语句)、如何查看慢查询(通过`long_query_time`配置)以及其对系统性能的影响。慢查询可能由缺乏索引、大数据量、网络延迟等因素引起。解决和避免慢查询的方法包括优化配置、添加索引、调整查询语句、批量处理数据、分库分表等。文章还强调了索引在提升查询性能中的作用,解释了B+树索引的工作原理,并列举了可能导致索引失效的场景。
393 0
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
257 1
|
3月前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
96 0
|
3月前
|
Java Apache Android开发
Struts 2的秘密武器:揭秘社区中隐藏的学习宝藏,让你从新手到高手的不归路!
【8月更文挑战第31天】Struts 2学习资源丰富,除官方文档外,TutorialsPoint和W3Schools等网站提供详尽教程;《Apache Struts 2实战》等书籍含全面实例。Udemy、Pluralsight及YouTube上视频课程众多,Apache Software Foundation亦有网络研讨会。实践方面,GitHub上的开源项目及个人小项目都是好选择。寻求帮助可访问Apache官方论坛、Stack Overflow等平台。
39 0
|
3月前
|
SQL 监控 关系型数据库
"SQL性能瓶颈大揭秘:一步步教你揪出慢查询元凶,从根源解决数据库拖沓问题,让应用速度飞起来!"
【8月更文挑战第31天】作为一名数据库管理员或开发者,面对复杂系统时,运行缓慢的SQL查询常常令人头疼。本文将指导你如何诊断并解决这些问题。首先,通过性能监控工具识别出问题查询;其次,利用`EXPLAIN`分析其执行计划,了解索引使用情况;接着,优化查询语句,如使用合适索引、减少JOIN操作等;再者,优化数据库设计,采用分区表或调整硬件资源;最后,持续监控性能并调优。通过这些步骤,可有效提升数据库的整体性能。
65 0
|
5月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
60 2
|
6月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
|
6月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
6月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询