mysql慢查询怎么开启 mysql 慢查询

MySQL中如何查看“慢查询”,如何分析执行SQL的效率?一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句
1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句 。
2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短 。
3 , slow_query_log_file
记录日志的文件名 。
4 , log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句 , 尽管这个SQL语句有可能执行得挺快 。
二、检测mysql中sql语句的效率的方法
1、通过查询日志
(1)、Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
代码如下
log-slow-queries = F:/MySQL/log/mysqlslowquery 。log
long_query_time = 2
(2)、Linux下启用MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上
代码如下
log-slow-queries=/data/mysqldata/slowquery 。log
long_query_time=2
说明
log-slow-queries = F:/MySQL/log/mysqlslowquery 。
为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限 , 一般都将这个目录设置为MySQL的数据存放目录;
long_query_time=2中的2表示查询超过两秒才记录;
2.show processlist 命令
SHOW PROCESSLIST显示哪些线程正在运行 。您也可以使用mysqladmin processlist语句得到此信息 。
各列的含义和用途:
ID列
一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 /*/mysqladmin kill 进程号 。
user列
显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句 。
host列
显示这个语句是从哪个ip的哪个端口上发出的 。用于追踪出问题语句的用户 。
db列
显示这个进程目前连接的是哪个数据库 。
command列
显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect) 。
time列
此这个状态持续的时间,单位是秒 。
state列
显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,以查询为例,可能需要经过copying to tmp table,Sorting result , Sending data等状态才可以完成
info列
显示这个sql语句,因为长度有限,所以长的sql语句就显示不全 , 但是一个判断问题语句的重要依据 。
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:
Checking table
 正在检查数据表(这是自动的) 。
Closing tables
 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表 。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中 。
Connect Out
 复制从服务器正在连接主服务器 。
Copying to tmp table on disk
 由于临时结果集大于tmp_table_size , 正在将临时表从内存存储转为磁盘存储以此节省内存 。
Creating tmp table
 正在创建临时表以存放部分查询结果 。
deleting from main table
 服务器正在执行多表删除中的第一部分,刚删除第一个表 。
deleting from reference tables
 服务器正在执行多表删除中的第二部分 , 正在删除其他表的记录 。
Flushing tables
 正在执行FLUSH TABLES,等待其他线程关闭数据表 。

推荐阅读