mysql 查询相关记录信息以及慢查询

45 篇文章 0 订阅
本文详细介绍了MySQL慢查询的定义、开启方法及日志记录,通过实例演示如何使用show status命令监测MySQL运行状态,包括查询次数、连接数及慢查询次数,同时提供了构建大表进行慢查询测试的方法。
摘要由CSDN通过智能技术生成

mysql优化,肯定要考虑sql语句(sql语句优化不在本文章内说明),优化sql语句,首先要定义慢查询,就是查询速度比较慢的sql,定位记录并分析

如果想知道当前mysql运行的一些状态,当前的mysql连接、并发量、运行时间等

首先进入mysql  

show status

看以下图,有400多种,平时常用的我们没有这么多,就那么几种。除非专业的DBA数据库管理员需要知道很多甚至全部

注意一点:show status  中间是有参数的  是:show [session|global] status   即:show session status或者show global status

举例:有些小伙伴在使用的时候明明有一次insert的语句,为什么再次打开窗口查看insert次数的时候总是不对,那是因为用的是session级别

区别请看下文

session和global的区别:

如果只是show status 默认是session级别,即会话级别,就是当前窗口,关闭窗口之后再查询不会记录之前窗口的操作记录

如果是 show global status 即所有,就是从mysql启动之后的所有操作记录都会记录

以下操作我都是以session为例。有兴趣的小伙伴可以尝试global

1. show status like "uptime";  查询当前mysql使用了多长时间 

   可以看到已经使用了121579秒,接近34小时

2.show status like "com_select";  查看使用了多少次查询、删除、修改、添加等,可以根据这些次数选择mysql存储引擎等

如果要看删除、添加等,将select 改为delete、insert.如:show status like "com_insert";

只举其中一个例子:

   可以看到,一次添加sql操作都没有

3.show status like "connections"; 查看mysql使用连接数,这里的连接数是指多少个客户端在连接mysql,比如打开5个mysql窗口或者有5个应用程序在连接着mysql,结果就是5

   有8个连接,包含我自己本地打开窗口占其中一个

4.netstat -an; 查看当前那些机器连接着mysql。linux操作系统也有此命令,这个命令不是在mysql里面运行,普通cmd命令窗口运行,一般这个命令的结果很多很多,比如oracle(默认端口1521)

  框出来的就是连接着oracle的,mysql同理,前面是ip地址,后面是端口,可以看到都是我本机连接着的,但是连接也需要端口,使用的本机的64379等端口,如果不需要可以直接杀掉,linux可以使用kill命令

 

本文重点:

show status like "slow_queries";查询慢查询的次数,有多少次慢查询(mysql默认情况下10秒以上为慢查询,一般数据量庞大的时候才会出现

   一次慢查询都没有

如何定位慢查询?

show variables like "long_query_time"; 查看慢查询时间

     10秒

set long_query_time=1   修改mysql慢查询(根据自己需要设定)

   设置为1秒

先来构建一张大数据量的大表(会用到一些存储过程)

sql地址:https://pan.baidu.com/s/1RzO7sLoF48pFBZOstv6slA   提取码:n7br

创建一张部门表:

创建雇员表:

创建工资级别表并添加5个级别:

定义一个执行命令结束符,是为了存储过程顺利执行

delimiter $$

delimiter关键字,定义一个结束符,我定义成$$,现在的$$就相当于之前的sql语句;的结束符

创建一个函数rand_string(如果不需要了删除它 drop  function rand_string $$   其他函数一样的操作方式)

如果在创建函数出现错误:Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

执行以下命令:

show variables like 'log_bin_trust_function_creators';
set global log_bin_trust_function_creators=1;
show variables like 'log_bin_trust_function_creators';

具体原因自行百度、google

 

将结束符修改回来delimiter ;     执行函数 select rand_string(6);

 

 

再创建创建一个函数,同样将结束符修改为$$

delimiter  $$ 

同样修改回来结束符;执行函数  delimiter ;  

 

同样的操作再执行几个函数这里就不再截图,提供的sql文件里面有,按照上面操作反复执行就行了,把函数执行完,就完成了大表的数据量(如果有现成的数据就更好,我这里是安装的新的mysql,目前也没有比较大量的数据),以上的函数表是为了方便验证慢查询用

如果超过之前设置的1秒就会被记录慢查询

如何开启慢查询?

mysql默认情况下不记录慢查询日志,需要在启动mysql时指定记录慢查询才会记录

可以在my.ini配置文件直接设定:

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1

或者在mysql直接设置 set global slow_query_log='ON';

 

先关闭mysql,再启动, 如果启用了慢查询日志,默认把这个文件放在my.ini 配置文件配置的地址

#Path to the database root

datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"

也可以mysql设置 set global slow_query_log_file='/usr/local/mysql/data/slow.log';日志文件可以自定义的,这个地址可以更改

进入这个文件就可以看到mysql慢查询记录的SQL语句

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值