zoukankan      html  css  js  c++  java
  • mysql 、慢查询、到底如何玩

    在项目开发中,那些开发大佬经常会写出一些SQL语句,一条糟糕的SQL语句可能让你测试的整个程序都非常慢,超过10秒的话,我觉得一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?

    1、开启MySQL的慢查询日志功能
    默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件,Windows下修改my.ini,如果是linux的话,需要Linux下修改my.cnf文件,在[mysqld]最后增加如下命令:

    slow_query_log
    long_query_time = 1

    2、测试慢查询日志功能

    进入MySql控制台,执行如下语句:

    mysql> select sleep(3);
    +----------+
    | sleep(3) |
    +----------+
    | 0 |
    +----------+
    1 row in set (3.01 sec)

    是不是感觉非常慢,如果慢 说明已经开启了慢查询

    3、注意点

      a、slow_query_log 这句是开启记录慢查询功能,slow_query_log=0关闭;slow_query_log=1开启(这个1可以不写)

      b、long_query_time = 1 这句是记录超过1秒的SQL执行语句

    4、如何记录低于1s的慢查询记录呢?

    进入MySql控制台,执行如下语句:

    mysql>set global long_query_time=0.1   设置记录慢查询超过时间100ms的SQL,记住要重启mysql才能生效!

    延伸点:

    进入到控制台了,接下来,我们查看下MySQL默认配置中多少秒才算慢查询

    mysql> show variables like 'long%';
    +-----------------+-----------+
    | Variable_name | Value |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.00 sec)

    所以系统默认的慢查询时间上限是10秒

    接下来 我们改成1秒

    mysql> set long_query_time=1; 注: 我设置了1, 也就是执行时间超过1秒的都算慢查询。
    Query OK, 0 rows affected (0.00 sec)

    判断MySQL开启慢查询日志记录没有?

    mysql> show variables like 'slow%';

     +------------------------------------+-------------------------------+
    | Variable_name                      | Value                         |
    +------------------------------------+-------------------------------+
    | slow_launch_time                   | 2                             |
    | slow_query_log                     | OFF                           |
    | slow_query_log_always_write_time   | 10.000000                     |
    | slow_query_log_file                | /mysql/carry-slow.log |
    | slow_query_log_timestamp_always    | OFF                           |
    | slow_query_log_timestamp_precision | second                        |
    | slow_query_log_use_global_control  |                               |
    +------------------------------------+-------------------------------+
    7 rows in set (0.00 sec)

    从slow_query_log 可以知道开关是关闭状态的,

    slow_query_log           是否打开日志记录

    slow_query_log_file    日志存放位置

    MySQL默认没有开启慢查询,下面我们来开启下:

    mysql> set global slow_query_log='ON';
    ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
    mysql>

    看来是没权限了啊,于是我去找老大申请了权限

    然后再次执行

    mysql> set global slow_query_log='ON';
    Query OK, 0 rows affected (0.00 sec)

    ok了,打完收工!

  • 相关阅读:
    sed 拓展 awk 拓展
    9.6/9.7 awk
    9.4/9.5 sed
    正则介绍_grep上& grep中 & grep下
    shell特殊符号cut命令& sort_wc_uniq命令 & tee_tr_split命令 & shell特殊符号
    管道符和作业控制 & shell变量& 环境变量配置文件
    shell介绍 & 命令历史 & 命令补全和别名& 通配符& 输入输出重定向
    yum更换国内源 & yum下载rpm包 & 源码包安装
    网络编程入门(下)
    网络编程入门(上)
  • 原文地址:https://www.cnblogs.com/lxs1314/p/7560899.html
Copyright © 2011-2022 走看看