MYSQL常用慢查询分析

1.MYSQL 慢查询

         MySQL提供的一种慢查询日志记录,用来记录在MySQL查询中响应时间超过阀值的记录
具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

2.MYSQL慢查询设置

  • slow_query_log            //是否开启,默认关闭,建议调优时才开启(show variables like '%slow_query_log%' )
  • slow_query_log_file    //慢查询日志存放路径(show variables like '%slow_query_log_file%';)    

 3.如何开启慢查询日志记录

   1)  命令式开启:  set global slow_query_log =1;             //只对当前会话生效,重启失效

   2) 配置文件式开启(找到my.cnf文件):

     vim my.cnf
     在[mysqld]下添加:
     slow_query_log = 1
     slow_query_log_file = /opt/mysql-5.7.28/data/linux-141-slow.log
     然后重启MySQL服务
 
   3)哪些sql语句会被记录在慢查询日志

       命令   :  show variables like 'long_query_time%';       -- 查看阀值(大于阀值的sql会被记录在慢查询日志中),阀值默认10s   

4)慢查询日志文件属性解释

      # Time: 2021-09-15T01:51:07.737834Z                                         ###### 执行SQL时间
     # User@Host: root[root] @  [192.168.36.1]  Id:     2                        ###### 执行SQL的主机信息
     # Query_time: 6.009129  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0                                                                                                                          ###### SQL的执行信息
     SET timestamp=1631670667;                                                         ###### SQL执行时间
     select sleep(6);                                                                                ###### SQL内容

4.设置查询阀值

    1)命令设置    set global long_query_time = 1;        // -- 设置慢查询阀值(设置为1s)

(注:另外开一个session或重新连接 ,才会看到变化。例如使用navicat工具时,在阀值设置前已经打开了一个窗口,设置了阀值后,打开的新窗口查询阀值时才能看到设置后的值[1s],原来打开的窗口还是会只查看到未设置之前的值[10s]。)

  2)配置文件设置

   vim my.cnf
   [mysqld]
   long_query_time = 1        //设置慢查询阀值为1s
   log_output = FILE
   重启MySQL服务

  3)查询阀值命令         show variables like '%long_query_time%';
 

5.如何把未使用索引的慢查询语句写入日志

   1) -- 查看设置,默认关闭 (OFF)    show variables like 'log_queries_not_using_indexes';

   2) -- 开启配置   set global log_queries_not_using_indexes = on;

6.模拟sql语句慢查询数据

  -- 睡眠2s再执行
select sleep(2);
-- 查看慢查询条数
show global status like '%Slow_queries%';

会发现,每执行一次select sleep(2),之后,再通过show global status …命令,他的值就会+1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于MySQL慢查询优化,有几个常见的方法和技巧可以尝试: 1. 确定慢查询:首先使用MySQL慢查询日志或性能分析工具(如Percona Toolkit)来确定哪些查询较慢。这样可以帮助你了解具体的问题。 2. 优化查询语句:检查慢查询中的SQL语句并进行优化。你可以考虑添加适当的索引以提高查询性能,或者重写复杂的查询语句以简化其逻辑。 3. 优化数据库结构:检查数据库表的设计和结构,确保表中的字段类型、索引和约束等设置是合理的。合理的数据库设计可以提高查询性能。 4. 避免全表扫描:尽量避免在大表上执行全表扫描操作,可以通过添加索引或者改进查询条件来避免全表扫描。 5. 调整系统配置参数:根据数据库负载和硬件性能,调整MySQL的配置参数,如缓冲区大小、连接池大小等,以提高系统性能。 6. 使用缓存:考虑使用缓存技术(如Redis)来缓存常用的查询结果,减轻数据库的压力。 7. 分离读写操作:将读操作和写操作分离到不同的数据库实例或服务器上,可以提高数据库的并发性能。 8. 使用慢查询日志或监控工具:定期分析慢查询日志,或者使用监控工具(如Prometheus和Grafana)来实时监测数据库性能,并及时调整和优化。 这些是一些常见的MySQL慢查询优化方法,具体的优化策略需要根据具体情况进行调整和实施。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值