1.进入mysql
1.1win10进入mysql安装路径(以下大部分命令使用win10环境的mysql服务):
1.2进入Linux(CentOS7)+docker+mysql容器
进入docker容器:
docker attach 容器id
或
docker exec -it 容器名 /bin/bash
退出docker容器:
按ctr+D
2.跳过授权表验证进入服务:
mysqld --skip-grant-tables //此时,启动MySQL的镜像,跳过授权表验证进入服务
3.查看mysql慢查询时间(mysql默认查询时间超过10s,该查询操作即为慢查询):
4.修改慢查询时间
一下语句的意思是:查询时间 > 666 秒 (而不是>=),为被视为慢查询,(重启后恢复原默认值)
5.记录慢查询
6.mysql设置开启慢查询日志
适用于不允许重启服务器的情况
7.截止到目前,查询当前产生了多少条慢查询记录
8.启动慢查询日志
8.1 使用mysql命令开启慢查询
设置开启慢查询:
设置超过1秒就记录日志:
mysql5.1版本之后,long_query_time以微秒记录时间
变量log_queries_not_using_indexes
设置为ON时,如果sql语句没有使用索引,则该语句将同样会被记录进慢查询日志。
mysql5.6.5版本之后新增了一个参数log_throttle_queries_not_using_indexes
,用来表示每分钟允许记录到slow log的且未使用到索引的SQL语句次数,默认该值为0:表示没有限制。
8.2 使用配置文件设置,windows环境下修改my.ini文件,添加如下命令:
# 开启慢查询日志,定义查询时间超过多少秒的查询叫做慢查询,这里定义的是超过2s
slow_query_log=2
# 设置阈值 `0.5` 秒
long_query_time=0.5
log_queries_not_using_indexes=ON
#设置慢查询日志存储位置和文件名
slow_query_log_file="/var/log/mysql/mysql_slow.log"
9.创建数据库和表,写存储过程循环插入大量数据,以便产生存储慢查询日志
9.1创建数据库和表
create database big_data;
use big_data;
创建表data_info的表结构如下:
9.2写存储过程插入大量数据
创建存储过程:
调用存储过程之前,先查看一下当前是否有慢查询记录:
调用存储过程,往数据库里面插入数据,可以看到该过程耗时43.65s,已经查过系统变量long_query_time(之前设置的2s)的值,按理说应该会产生慢查询日志。
我们可以使用命令show global status like '%slow_queries%';
来查看当前是否有慢查询产生:
10.分析慢查询日志——使用分析处理日志的工具
查看慢查询日志所在目录:
按Ctr+Z退出mysql操作命令模式,在Linux环境下,查看以上图片标记的目录下的慢查询日志内容
10.1 使用mysql程序自带的mysqldumpslow命令分析
10.2 如果慢查询日志较大,可使用tail命令查看部分内容
如:
字段意义解析:
第一行,SQL查询执行的时间 第二行,执行SQL查询的连接信息,用户和连接IP 第三行,记录了一些我们比较有用的信息,如下解析:
- Query_time,这条SQL执行的时间,越长则越慢
- Lock_time,在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
- Rows_sent,查询返回的行数
- Rows_examined,查询检查的行数,越长就当然越费时间
第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。
第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。
10.3 使用pt(Percona Toolkit)工具的pt-query-digest进行统计分析。
这个是由Percona公司出品的一个用perl编写的脚本,只有安装上pt工具集才会存在,有兴趣的朋友就要先安装pt工具了。
yum install perl-CPAN perl-Time-HiRes perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL
yum install https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm
直接分析慢查询文件,执行如下:
pt-query-digest slow_querys.log >t.txt
10.4 如果用户希望得到执行时间最长的10条SQL语句,可以运行以下命令:
mysqldumpslow -s al -n 10 /var/lib/mysql/6b083274647b-slow.log
来源:CSDN
作者:weixin_42956047
链接:https://blog.csdn.net/weixin_42956047/article/details/103768582