慢查询日志设置

  当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。

  1、临时开启慢查询日志(如果需要长时间开启,则需要更改mysql配置文件)

  set global slow_query_log = on;

  注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off; 即可

  2、临时设置慢查询时间临界点 查询时间高于这个临界点的都会被记录到慢查询日志中(如果需要长时间开启,则需要更改mysql配置文件)。

  set long_query_time = 1;

  现在起,所有执行时间超过1秒的sql都将被记录到慢查询文件中(我这里就是 /data/mysql/mysql-slow.log)。

  3、设置慢查询存储的方式

  set globle log_output = file;

  说明: 可以看到,我这里设置为了file,就是说我的慢查询日志是通过file体现的,默认是none,我们可以设置为table或者file,如果是table则慢查询信息会保存到mysql库下的slow_log表中

  4、查询慢查询日志的开启状态和慢查询日志储存的位置

  show variables like '%quer%';

  参数说明:

  slow_query_log : 是否已经开启慢查询

  slow_query_log_file : 慢查询日志文件路径

  long_query_time : 超过多少秒的查询就写入日志

  log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)

  5、使用慢查询日志示例

  cat -n /data/mysql/mysql-slow.log

  从慢查询日志中,我们可以看到每一条查询时间高于1s钟的sql语句,并可以看到执行的时间是多少。

  6、永久设置慢查询日志开启,以及设置慢查询日志时间临界点

  linux中,mysql配置文件一般默认在 /etc/my.cnf

  更改对应参数即可。

  对慢查询日志进行分析

  我们通过查看慢查询日志可以发现,很乱,数据量大的时候,可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。所以,这里,我们采用工具进行分析。

  1、使用mysqldumpslow进行分析【第一种方式】

  mysqldumpslow是mysql安装后就自带的工具,用于分析慢查询日志,下面是一个简单的例子:

  mysqldumpslow -t 10 /data/mysql/mysql-slow.log #显示出慢查询日志中最慢的10条sql

  2、使用pt-query-digest工具进行分析

  pt-query-digest不是mysql自带的,如果想使用pt-query-digest进行慢查询日志的分析,则需要自己安装pt-query-digest。pt-query-digest工具相较于mysqldumpslow功能多一点。

  (1)安装

  yum install perl-DBI

  yum install perl-DBD-MySQL

  yum install perl-Time-HiRes

  yum install perl-IO-Socket-SSL

  wget percona.com/get/pt-query-digest

  chmod u+x pt-query-digest

  mv pt-query-digest /usr/bin/

  (2)查看具体参数作用

  pt-query-digest --help

  (3)使用

  pt-query-digest /data/mysql/mysql-slow.log

  查询出来的结果分为三部分

  第一部分:

  显示出了日志的时间范围,以及总的sql数量和不同的sql数量。

  第二部分:

  显示出统计信息。

  第三部分:

  每一个sql具体的分析

  pct是percent的简写,表示占的百分比

  cout是占总sql个数的百分比,exec time 是占总执行时间的百分比,lock time 表示占总的锁表时间的百分比。

  (4)如何通过pt-query-digest 慢查询日志发现有问题的sql

  1)查询次数多且每次查询占用时间长的sql

  通常为pt-query-digest分析的前几个查询

  2)IO消耗大的sql

  注意pt-query-digest分析中的Rows examine项

  3)为命中索引的sql

  注意pt-query-digest分析中Rows examine(扫描行数) 和 Rows sent (发送行数)的对比 ,如果扫描行数远远大于发送行数,则说明索引命中率并不高。

  mysql优化

  1、使用explain查询sql的执行计划

  explain select comic_id,name,pen_name,cover,last_verify_time from comic;

  参数分析:无锡人流多少钱 http://wapyyk.39.net/wx/zonghe/fc96e.html/

  table:表示属于哪张数据表

  type:最重要的参数,表示连接使用了何种类型。从最好到最差的连接类型为const,eq_reg,ref,range,index和ALL。

  possible_keys:显示可能应用在这张表中的索引。如果为null,则表示没有可能的索引。

  key:实际使用的索引。如果为null,则表示没有使用索引。

  key_len:使用的索引的长度,在不损失精确性的情况下,长度越短越好。

  ref:表示索引的哪一列被使用了,如果可能的话,是一个常数。

  rows:Mysql认为必须检查的用来返回请求数据的行数。

  2、count() 和 Max() 的优化方法

  (1)优化前,是没有为last_update_time字段建立索引的情况,查询最大的时间戳

  (2)优化后,是为last_update_time字段建立索引的情况,查询最大的时间戳

  create index update_time on comic(last_update_time);

  对比,可以看到,在没有为字段建立索引的情况下,查询时间是11秒多,建立索引之后,查询时间变成0秒了。

  所以总结就是,如果经常用于count和max操作的字段,可以为其添加索引。

  还有,值得注意的地方是:count() 计算时,count(*)会将这一列中的null值但也算进去,而count(comic_id)则不会将null算进去。

  3、子查询的优化

  通常情况下,需要把子查询优化为join查询,但在优化时要注意关联键是否有一对多的关系,如果有,是可能会出现重复数据的。所以如果存在一对多关系,则应该使用distinct进行限制。

  例如:

  select t.id from t where t.id in (select k.kid from k);

  优化成:

  select distinct t.id from t join k on t.id = k.kid;

  4、group by 的优化

  5、limit的优化

  6、选择合适的列建立索引

  7、选择合适的数据类型

  8、数据库表的范式化优化

  9、数据库表的反范式优化

  10、数据库表的垂直拆分

  11、数据库表的水平拆分

  12、数据库系统配置优化

  13、Mysql配置文件优化

  14、第三方配置工具使用

  15、服务器硬件优化

Mysql慢查询日志以及优化的更多相关文章

  1. MySQL慢查询日志释疑总结

      之前写了一篇"MySQL慢查询日志总结",总结了一些MySQL慢查询日志常用的相关知识,这里总结一下在工作当中遇到关于MySQL慢查询日志的相关细节问题,有些是释疑或自己有疑惑 ...

  2. 企业级中带你ELK如何实时收集分析Mysql慢查询日志

    什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...

  3. MySQL慢查询日志相关的文件配置和使用。

    MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...

  4. MySQL慢查询日志相关的配置和使用。

    MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...

  5. Mysql慢查询日志过程

    原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句 ...

  6. MySQL 慢查询日志介绍

    转: MySQL 慢查询日志介绍 2018年08月23日 08:47:40 曾梦想仗剑走天涯XX 阅读数 1104   一. 慢查询介绍 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记 ...

  7. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  8. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  9. ELK logstash 处理MySQL慢查询日志(初步)

    写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...

随机推荐

  1. java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)

    import lombok.Cleanup; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; impor ...

  2. 在 Alpine Linux 中安装 bash shell

    如何在我的 Alpine Linux LXD(Linux容器)虚拟机(VM)中安装 bash shell? Alpine Linux 自带 BusyBox 工具.它被评为“嵌入式 Linux 的瑞士军 ...

  3. eclipse中自定义注释模板

    eclipse中自定义注释模板 2018年10月09日 10:51:27 lm_y 阅读数 857更多 分类专栏: java Java   编辑注释模板的方法:Window->Preferenc ...

  4. ios兼容性收集整理

    1. ios系统兼input输入框光标问题 异常现象:苹果手机文本输入框样式异常——光标聚焦到文本框,光标高度充满文本框,输入内容,光标高度为文本框上边框到输入内容底部: 光标聚焦: 输入内容: 异常 ...

  5. StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation - 1 - 多个域间的图像翻译论文学习

    Abstract 最近在两个领域上的图像翻译研究取得了显著的成果.但是在处理多于两个领域的问题上,现存的方法在尺度和鲁棒性上还是有所欠缺,因为需要为每个图像域对单独训练不同的模型.为了解决该问题,我们 ...

  6. Chrome禁用software_reporter_tool

    今天开机后,从几分钟到半个小时之间,感觉机器反应有些慢,发现CPU占用80-90%.查看任务管理器, 有一个 software_reporter_tool.exe 的程序占用了一半的CPU使用率. 转 ...

  7. @vue/cli 4.1.1安装

    按照安装步骤,先卸载,再安装,最终,查看vue -V 的版本都是3.8.2,也就是说并没有安装成功,于是,考虑用yarn去安装 1,首先清除缓存: yarn cache clean 2,yarn设置淘 ...

  8. 转 RAC单个节点执行expdp提示ORA-31693 ORA-31617 ORA-19505 ORA-27037错误

    http://blog.itpub.net/31394774/viewspace-2217567/ 1.在RAC单节点执行expdp,出现ORA-31693 ORA-31617 ORA-19505 O ...

  9. word中的总页数不包括封面、目录

    删除分隔符:选项-显示-显示所有格式标记

  10. jdk7中hashmap实现原理和jdk8中hashmap的改进方法总结

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...