• 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了,打完收工!

  • 相关阅读:
    Flask把变量注册到模板中
    $.each与$(data).each区别
    【Python备忘】python判断文件和文件夹是否存在
    ISP图像质量自动化测试方法
    使用微软的(how-old.net)构建智能门店管理系统
    在virtualenv中安装libxml2和libxslt
    Python 装饰器学习以及实际使用场景实践
    tensorflow零起点快速入门(4) --入门常用API
    tensorflow零起点快速入门(3)
    树莓派和STM32通过USB和串口通信记录
  • 原文地址:https://www.cnblogs.com/lxs1314/p/7560899.html
Copyright © 2020-2023  润新知