mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla

前提:分析mysql性能的时候会查看数据库的哪些sql语句有问题,效率低。这就用到了数据库的慢查询,作用就是: 它能记录下所有执行超过long_query_time时间的SQL语句,帮你找到执行慢的SQL,方便我们对这些SQL进行优化。

1.配置慢查询

在mysql客户端执行

mysql> show variables like "%query%" ;

得到结果:

3c829890d9ed

设置慢查询.png

涉及参数解释:

slow_query_log :是否开启慢查询,ON 开启,OFF关闭

修改参数使用命令:

set global slow_query_log=ON; #开启MySQL慢查询功能

long_query_time :慢查询时间设置,默认是10秒

slow_query_log_file :慢查询日志存放路径

还可以通过修改MySQL配置文件参数,开启MySQL慢查询。vi /etc/my.cnf ,在[mysqld]段添加以下代码:

slow-query-log = on #开启MySQL慢查询功能

slow_query_log_file = /data/mysql/127-slow.log #设置MySQL慢查询日志路径

long_query_time = 5 #修改为记录5秒内的查询,默认不设置此参数为记录10秒内的查询

log-queries-not-using-indexes = on #记录未使用索引的查询

:wq! #保存退出

service mysqld restart #重启MySQL服务

2.查看慢查询日志

执行sql后就可以看到配置的路径下面有日志生成了,对于得到的日志有2中方式可以对其分析,一是mysql自带的 mysqldumpslow,另外一个是要独自安装的 mysqlsla,下面分别介绍一下。

2.1 mysqldumpslow 分析慢查询日志

执行命令:

[root@chances126 /]# mysqldumpslow /var/lib/mysql/mysql-slow.log

得到的信息解释:

主要功能是, 统计不同慢sql的

出现次数(Count),

执行最长时间(Time),

累计总耗费时间(Time),

等待锁的时间(Lock),

发送给客户端的行总数(Rows),

扫描的行总数(Rows),

用户以及sql语句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).

对我而言,看到返回的这一对信息,我是崩溃的,也没有提示是哪个数据库报的,一般一台服务器有很多数据库,这样根本看不出来啊。我不偏爱这个工具,虽然他是不用安装的。

2.2 mysqlsla 分析慢查询日志

这个工具需要安装,看下如何安装吧。Linux如何安装 mysqlsla

安装好后,接下来就是使用了:

#查询记录最多的10条,可以指定具体的数据库

mysqlsla -lt slow -sort t_sum -sf "+select,update,INSERT" -db hunaniptv -top 10 /var/lib/mysql/mysqld_slow.log

#查询记录最多的20个sql语句,并写到select.log中去

mysqlsla -lt slow --sort t_sum --top 20 /data/mysql/127-slow.log >/tmp/select.log

#统计慢查询文件为/data/mysql/127-slow.log的所有select的慢查询sql,并显示执行时间最长的100条sql,并写到sql_select.log中去

mysqlsla -lt slow -sf "+select" -top 100 /data/mysql/127-slow.log >/tmp/sql_select.log

#统计慢查询文件为/data/mysql/127-slow.log的数据库为mydata的所有select和update的慢查询sql,并查询次数最多的100条sql,并写到sql_num.sql中去

mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata /data/mysql/127-slow.log >/tmp/sql_num.log

得到的信息大概是这种样子:

3c829890d9ed

mysqlsla分析慢查询.png

返回参数解释:

Count, sql的执行次数及占总的slow log数量的百分比.

Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.

95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.

Lock Time, 等待锁的时间.95% of Lock , 95%的慢sql等待锁时间.Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.

Rows examined, 扫描的行数量.

Database, 属于哪个[数据库]

Users, 哪个用户,IP, 占到所有用户执行的sql百分比

Query abstract, 抽象后的sql语句

Query sample, sql语句

对于得到这个信息还可以进一步分析,就是登陆到mysql 的客户端,登陆数据库,执行 EXPLAIN查看sql具体的 type 信息。

[root@chances126 /]# mysql -uroot -pchances

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 141058

Server version: 5.1.73-log Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use sc_epg_release4

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> EXPLAIN select distinct a.* from EPG_CONTENT_SERIES a join EPG_CATEGORY_ITEM b on a.CONTENT_CODE = b.ITEM_CODE where a.ENABLE_STATUS=1 and b.STATUS=0 and a.EXTERNAL_CODE = '2000000200000010042000000006088';

+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+

| 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 28504 | Using where; Using temporary |

| 1 | SIMPLE | a | ref | seriesIndex | seriesIndex | 387 | sc_epg_release4.b.ITEM_CODE | 1 | Using where |

+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+

2 rows in set (0.00 sec)

mysql>

可以看出 a 表是全表查询,b表级别是 ref ,可以进一步分析 sql 了。

性能从最好到最差:system、const、eq_reg、ref、range、index和ALL

如果看到性能不好,就可以把sql给研发去分析了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql分库分表面试_【53期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?...

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅。一、概述随着时间和业务的发展,数据库中表的数据量会…

pandas python groupby_python – 如何使用pandas groupby汇总多个列?

我有一个看起来像的数据框day type col d_1 d_2 d_3 d_4 d_5...1 A 1 1 0 1 01 A 2 1 0 1 02 B 1 1 1 0 0也就是说,我有一个普通的列(col)和许多以d_为前缀的列我需要按日执行groupby并键入,我想计算每个日期类型组合的每个d_列中的值的总和.我还需要在我的数据中的其他列上执行…

圆管当量直径_截面相同时,正方型截面的当量直径大于圆管直径。( )。

“党在过渡时期的总路线的实质,截面就是使生产资料的社会主义公有制成为我们国家和社会的( )的经济基础。”根据小儿尿道特点,相同型截易患的疾病为正方直径直径泌尿系感染的致病菌最为常见的是当量大于汽车离合器踏板自由行程过小或没有行程, 将会引起(…

h710阵列卡支持最大硬盘_DELL服务器RAID磁盘阵列在线扩容(以H710P阵列卡为例)

DELL服务器RAID磁盘阵列在线扩容(以H710P阵列卡为例)分享到:作者来源: 未知 发布时间:2013-01-12简介我们可通过扩充容量和 / 或改变 RAID 级别的方式来重新配置联机虚拟磁盘。注: 跨接式虚拟磁盘 (如 RAID 10、 50 和 60)无法重新配置…

linuxpgrepgrep_linux命令:ps pstree pgrep pidof进程管理

ps命令简介:此个命令用于查看用户进程。1.命令格式:ps [option] : ps 参数常用的使用格式:ps aux |grep keyword 通过关键字查找相关的进程信息[rootxuelinux ~]# ps aux 显示所有进程的信息USER PID %CPU %MEM …

bash shell sed 获取第一行_老司机给出的关于 shell 脚本的8个建议,必收!

这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训。事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条。毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生常谈…

springmvc与mysql实例_Spring+Mybatis+SpringMVC+Maven+MySql搭建实例

摘要:本文主要讲了如何使用Maven来搭建SpringMybatisSpringMVCMySql的搭建实例,文章写得很详细,有代码有图片,最后也带有运行的效果。一、准备工作1. 首先创建一个表:CREATE TABLE t_user (USER_ID int(11) NOT NULL A…

python常规异常的基类_Python警告的基类警告类是____。

【判断题】pickle使用pickle.dump(data,file)读取数据。【单选题】下列是Python断言语句失败的错误类型是?【单选题】立体被平面截切所产生的表面交线称为( )。【判断题】在Python的异常处理中,可以人为的设置某种错误类型【单选题】单片机实质上是一个【单选题】确认密码的限…

磁力mysql搜索_多功能搜索 搜索系统安装 小说 电影 磁力

环境:2h4g 60ssd一、首先安装宝塔面板yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh安装环境采用 nginx php7 mysql5.5二、关闭centos下的防火墙CentOS 6.5关闭防火墙servcie iptables st…

ES迁mysql_使用kafka连接器迁移mysql数据到ElasticSearch

概述把 mysql 的数据迁移到 es 有很多方式,比如直接用 es 官方推荐的 logstash 工具,或者监听 mysql 的 binlog 进行同步,可以结合一些开源的工具比如阿里的 canal。这里打算详细介绍另一个也是不错的同步方案,这个方案基于 kafka…

mysql not exists很慢_查询速度优化用not EXISTS 代替 not in

exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:select name from student where sex m and mark exists(select 1 from grade where ...) ,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段…

python自定义函数func_python自定义函数与面向对象

前言python的最大特点就是dynamically typed就是动态类型,不像java需要定义数据类型引入先从一段代码引入:12345678910class Dog():def __init__(self,name,age):self.namenameself.ageagedef getName(self):return self.namedogDog(name,16)print(dog.g…

java的继承实例_java继承(实例讲解一)

Java继承(Java inheritance)Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周…

java 调用groovy_Java调用Groovy脚本

在idea下,标准的Java maven项目中展示如何调用Groovy脚本和方法。maven项目引进Groovy libFile -> Project Structure -> Global Libaries 添加下载好的Groovy下lib里面的jar包调用Groovy脚本首先,Java调用Groovy脚本需要该Groovy脚本里面有个main…

java struts 框架_java中struts 框架的实现

该文章主要简单粗暴的实现了struts的请求转发功能。 其他的功能后续会慢慢补上。最近在学习javassist的内容,看到一篇文章 大家一起写mvc 主要简单的描述了mvc的工作流程,同时实现了简单的struts2功能。这里仿照的写了个简单的struts2框架,…

memcached 使用 java_使用Java java_memcached client的陷阱

这2天,才发现之前我们的某个开发人员使用java_memcached-release_2.0.1.jar是有问题的在我们的某个模块里,需要2个memcached,分别提供不同的服务于是,开发的人员就从网上粘贴来如下的码,分别生成2个MemcacheUtil类stat…

java final 变量只读_java final的使用总结

final 变量:是只读的;final 方法:是不能继承或者重写的。final 引用:引用不能修改,但是对象本身的属性可以修改;final class:不可继承;final MyObject o new MyObject();o.setValue…

java list 获取索引_java – 获取arrayList中元素的索引

我试图在arrayList minuteList中获得466的索引[288, 318, 346, 376, 406, 436, 466, 1006, 1036, 1066, 1096, 1126, 1156]但我收到这个错误:java.lang.IndexOutOfBoundsException: Index: 466, Size: 13at java.util.ArrayList.rangeCheck(ArrayList.java:635)at j…

java 如何调用static_java 关键字static详细介绍及如何使用

java 关键字static 详解一、 static代表着什么在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码…

java xml setdoctype_如何在Java中使用DOM将自定义doctype标记添加到带有xhtml标记的xml中?...

我使用java中的DOM创建了一个XML文档,并将XHTML标记插入到XML文档中。现在我要添加如下doctype:]>我试着把它作为一个字符串追加,但没有成功。DocumentBuilderFactory docFactory DocumentBuilderFactory.newInstance();docFactory.setNamespaceAware(true);DocumentBuilde…