MYSQL定位慢查询

在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页。

如何优化SQL语句将那些运行时间比较长的SQL语句找出呢?

MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!

那么如何应用慢查询呢? 一、开启MySQL的慢查询日志功能

show variables like 'slow_query%'; 查询就是否开启慢查询,如图:

默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件:

windows下修改my.ini,Linux下修改my.cnf文件。

在[mysqld]最后增加如下命令:     set GLOBAL slow_query_log =ON ;    表示开启慢查询日志功能

    set long_query_time = 1;  表示设置慢查询的时间为1S,默认为10S,有查询超过了这个时间,将会被记录到慢查询日志中,高版本的可以设置小数。

    slow_query_log_file=c:/slow.log    表示慢查询日志存放的目录文件,默认在mysql的data目录下生成“主机名_slow.log”的文件来存放日志。 上面配置修改好后,重启动MYSQL服务吧!然后开始测试咯! 1、在MYSQL控制台输入命令:select sleep(2) mysql> select sleep(2); +----------+ | sleep(2) | +----------+ | 0| +----------+ 1 row in set (2.00 sec) 2、再查看慢查询的日志文件,会看到以下信息。 # Time: 141014 14:28:52 # User@Host: root[root] @ localhost[::1] Id: 1 # Query_time: 2.000114 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1413268132; select sleep(2);

二、MYSQL数据库查看状态的命令:

show [session|global]status 注:不写默认的为session..session只取出当前会话的状态,global会取出从数据库启动到现在的状态。 show status 查看数据库状态,这里面的状态有很多,DBA应该了解大多数。 show status like ‘uptime’ 数据库启动时间(S) show status like ‘com_select’ 数据库执行了多少次查询 show status like ‘com_update’ 数据库执行了多少次更新 show status like ‘com_delete’ 数据库执行了多少次删除 show status like ‘com_insert’ 数据库执行了多少次插入 show status like 'connections' 试图连接mysql的连接数; 另外可用cmd下的netstat –an查看是那些IP连接到3306上,即连接到MYSQL数据库上。

show status like 'slow_queries'; 慢查询次数。默认情况下,超过10S的为慢查询。控制台下修改MYSQL默认的慢查询时间 show variables like 'long_query_time' 查询默认的慢查询时间 set long_query_time = 1 设置默认的慢查询时间

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xiaoheike

linux 创建sudo账号.md

root ALL=(ALL) ALL 在该行下面添加: username ALL=(ALL) ALL

12210
来自专栏Java架构师历程

MySQL 谈谈Memory存储引擎

memory存储引擎是MySQL中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。这些特性都与InnoDB,MyISAM存储引...

28120
来自专栏大数据-Hadoop、Spark

Linux上安装MySql

准备安装环境 CentOS6.7 Final MySQL-5.5.48-1.linux2.6.x86_64.rpm-bundle.tar 上传MySQL安装包到...

45050
来自专栏乐沙弥的世界

加强MySQL用户安全

   很多亲们在安装好了MySQL数据库之后,对于mysql用户表并没有做任何特殊的处理,因此缺省情况下,存在密码为空的用户,也有很多用户名和密码都为空的情形...

10810
来自专栏性能与架构

SQL与MongoDB的对应关系图表

关系数据库有一套标准的SQL语句来操作数据库,MongoDB是文档型数据库,概念与操作方式与SQL都不相同,下面的几张表全面的表达了SQL与MongoDB的对应...

39960
来自专栏程序猿

MySQL加载本地文本、导入SQL文件及其他常见命令行。

13230
来自专栏WindCoder

MySQL事务与存储引擎-数据库事务单元测试

这是微专业参加单元测试后的试题及答案整理,分享出来,供大家参考,所有标红的为答案。

22910
来自专栏程序员同行者

mysql权限与安全

19840
来自专栏idba

浅谈一致性读

一 前言 MySQL 在不同的事务隔离级别下提供两种读模式 一致性读(非加锁), 当前读(加锁读)。本文主要研究一致性读取。

9430
来自专栏杨建荣的学习笔记

关于权限设置的一个小把戏(r2第27天)

现在有一个需求,需要开放一些"特殊“的权限给开发组。 具体的背景是这样的: 有三个数据库用户,tabowner, tabconn, tab_temp三个用户 t...

27890

扫码关注云+社区

领取腾讯云代金券