MySQL的慢查询设置

引言: MySQL是目前最为流行的数据库,在实际应用中,需要关注的查询比较慢的SQL语句,在Mysql中已经提供了类似的设置,帮忙我们将执行时间超过某个时间阀值的SQL打印出来。本文将介绍如何来设置并使用这个功能。

1.  设置选项

  •   long_query_time

       定义慢查询SQL的时间阀值,执行时间超过这个阀值即被标识为慢SQL。 其值范围为: 0~~10

  •  show_query_log

               是否打开慢SQL的开关阀值: 取值为0(OFF), 1 (ON)

  •   show_query_log_file

                指定慢查询所在log文件的位置

2.  使用示例

     2.1  查询慢SQL设置

         

         long_query_time的设置,其取值范围为0~10秒

         

2.2  其他参数设置

       这里的设置log_slow_admin_statements: 标识是否记录admin命令的慢查询,值范围同于slow_query_log.

      log_slow_slave_statements: 标识是否记录slave节点命令的慢查询,值范围同于slow_query_log.

      slow_launch_time:   slow_launch_time的设定跟慢查询日志的查询阀值设定不同,表示了thread create的一个阀值,如果thread create的时间超过了这个值,这变量slow_launch_time的值加1.slow_launch_time的设定跟慢查询日志的查询阀值设定不同,表示了thread create的一个阀值,如果thread create的时间超过了这个值,这变量slow_launch_time的值加1.

3.  Session和global设置

   global的variables设置的是全局变量,变量更新设置之后,只针对新链接生效,对于已有的连接只有断开重新连接之后,方可生效。

   每一个连接下会保留一套自己的session varaibles, 全局的变量修改,不影响session下的设置, 全局下的设置在重连之后方可生效。

   session级别在设置后立即生效 断开连接后变量就失效了

set session sort_buffer_size=10000
global不是立即生效 而是对新连接生效
set global sort_buffer_size=100000(要求有管理员权限)

4. 慢查询日志示例

   根据上次的设置,慢查询日志文件为: /var/lib/mysql/flybird-sql.log

      

   文件内容示例:

/usr/sbin/mysqld, Version: 5.6.28 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 160810 11:07:36
# User@Host: root[root] @ localhost []  Id: 15807
# Query_time: 0.095879  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
use zabbixdb;
SET timestamp=1470798456;
set global slow_query_log=ON;
# Time: 160810 11:07:57
# User@Host: root[root] @ localhost []  Id: 15807
# Query_time: 0.114148  Lock_time: 0.000114 Rows_sent: 1  Rows_examined: 311632
SET timestamp=1470798477;
select count(*) from history_uint;
# Time: 160810 11:10:12
# User@Host: root[root] @  [101.254.182.34]  Id: 15808
# Query_time: 0.054581  Lock_time: 0.000137 Rows_sent: 1  Rows_examined: 6559
SET timestamp=1470798612;
select count(*) from history_text;
# Time: 160810 11:10:21
# User@Host: root[root] @  [101.254.182.34]  Id: 15808
# Query_time: 0.116142  Lock_time: 0.000144 Rows_sent: 1  Rows_examined: 311632
SET timestamp=1470798621;
select count(*) from history_uint
  内容分析: 每个SQL都会记录比较完成的信息,比如来源用户以及主机信息, 整个SQL执行的相对比较完整的信息,以及具体的SQL语句。
# Time: 160810 11:10:21   #执行时间
# User@Host: root[root] @  [101.254.182.34]  Id: 15808    # 用户、主机以及进程ID
# Query_time: 0.116142  Lock_time: 0.000144 Rows_sent: 1  Rows_examined: 311632   #sql执行时间分布
SET timestamp=1470798621;
select count(*) from history_uint                       #具体的SQL

5.  参考资料

  •    http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
  •    http://blog.163.com/longsu2010@yeah/blog/static/173612348201162595425697/
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值