Mysql内置的profiling性能分析工具
如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK。
一般的企业一般是DBA数据库工程师从监控里找到问题。DBA会告诉我们让我们来排查问题,那么可能很多种原因,也许是程序内存泄漏、也许是网络、也许是死锁、也许是SQL写的烂。假设是SQL问题我们需要把SQL抓出,一般就是在测试环境跑一下SQL,重现故障。首先打开我们的慢查询日志,这样把有问题的SQL排查出来,然后用EXPLAIN分析一下,一般到了这一步应该会找到相应问题所在。但是如果还是没有解决,SQL在传输网络、链接、是否是死锁等各方面都再有一个更加详细的排查,那么show profile就可以帮忙解决了。
差不多到了这,基本上95%的问题解决了,那么最后如果通过前面问题的分析,解决的问题还是一般般,那么就需要配合DBA看看mysql配置文件各方面的参数节点配置进行调优了。
show profile是什么?是Mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量。
默认情况下参数处于关闭状态,开启后保存最近15次的运行结果。
假设一条SQL执行完成之后,10秒钟,这么慢,那么能不能有一张清单告诉你你到底是多少个步骤,比如第一步花了1.34秒,第二步花了2.44秒...累积达到10秒,show profile就有这样的功能。
SQL导致服务器慢要么就是CPU运算复杂要么就是频繁IO。
MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具,通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况,如 CPU,IO,IPC,SWAP 等,以及发生的 PAGE FAULTS,CONTEXT SWITCHE 等等,同时还能得到该 Query 执行过程中 MySQL 所调用的各个函数在源文件中的位置。
MySQL [test_db]> show variables like '%profiling%'; //查看是否开启
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | ON |
| profiling_history_size | |
+------------------------+-------+
MySQL [test_db]> set profiling=on; //开启show profiling
Query OK, rows affected, warning (0.00 sec)
reset cache query; //清空SQL缓存
select * from table where... order by desc limit ,; //执行SQL
show profiles; //获取系统中保存的所有query的profile概要信息
MySQL [test_db]> show profiles;
+----------+------------+-------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------------------------+
| | 0.00099825 | select * from emp order by id desc limit , |
| | 0.00004150 | select * from emp order by id desc limit , |
| | 0.00007300 | select * from emp order by id desc limit , |
| | 0.00010325 | select * from emp order by id desc limit , |
| | 0.00011000 | select * from emp order by id desc limit , |
| | 0.00007025 | select * from emp order by id desc limit , |
| | 0.00005275 | select * from emp order by id desc limit , |
| | 0.00004050 | select * from emp order by id desc limit , |
| | 0.00009000 | select * from emp order by id desc limit , |
| | 0.10676625 | select * from emp order by id desc limit , |
| | 7.02310450 | select * from emp order by id desc limit |
| | 3.90775625 | select * from emp order by id desc limit |
| | 2.96361950 | select * from emp order by id desc limit |
| | 0.19119000 | set profiling= |
| | 0.10549050 | select count(*) from emp |
+----------+------------+-------------------------------------------------+
三列分别是查询ID,执行时间,执行SQL
在获取到概要信息之后,就可以根据概要信息中的 Query_ID 来获取某个 Query 在执行过程中,以19为例
MySQL [test_db]> show profile cpu,block io for query ;
MySQL [test_db]> MySQL [test_db]> show profile cpu,block io for query ;
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000037 | 0.000000 | 0.000000 | | | //开始连接
| Waiting for query cache lock | 0.000002 | 0.000000 | 0.000000 | | | //找缓存
| starting | 0.000001 | 0.000000 | 0.000000 | | |
| checking query cache for query | 0.104519 | 0.000000 | 0.001000 | | |
| checking permissions | 0.000011 | 0.000000 | 0.000000 | | | //验证权限
| Opening tables | 0.000014 | 0.000000 | 0.000000 | | |
| init | 0.000787 | 0.000000 | 0.000000 | | |
| System lock | 0.000017 | 0.000000 | 0.000000 | | |
| Waiting for query cache lock | 0.000002 | 0.000000 | 0.000000 | | |
| System lock | 0.000013 | 0.000000 | 0.000000 | | |
| optimizing | 0.000010 | 0.000000 | 0.000000 | | |
| executing | 0.000009 | 0.000000 | 0.000000 | | |
| end | 0.000003 | 0.000000 | 0.000000 | | |
| query end | 0.000005 | 0.000000 | 0.000000 | | |
| closing tables | 0.000031 | 0.000000 | 0.000000 | | |
| freeing items | 0.000010 | 0.000000 | 0.000000 | | |
| Waiting for query cache lock | 0.000001 | 0.000000 | 0.000000 | | |
| freeing items | 0.000013 | 0.000000 | 0.000000 | | |
| Waiting for query cache lock | 0.000001 | 0.000000 | 0.000000 | | |
| freeing items | 0.000001 | 0.000000 | 0.000000 | | |
| storing result in query cache | 0.000003 | 0.000000 | 0.000000 | | |
| cleaning up | 0.000002 | 0.000000 | 0.000000 | | |
+--------------------------------+----------+----------+------------+--------------+---------------+
上面结果显示了完整的生命周期过程。
如果出现以下四种情况之一,那么就有问题!
converting HEAP to MyISAM查询结果太大,内存不够用了往磁盘上搬了。
Creating tmp table 创建了临时表,拷贝数据到临时表,用完再删除
Copying to tmp table on disk ,把内存中临时表复制到磁盘,很危险!
locked,锁了。
Mysql内置的profiling性能分析工具的更多相关文章
- Mysql优化_内置profiling性能分析工具
如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...
- Mysql系列(十)—— 性能分析工具profiling
转载自:http://www.ywnds.com/?p=8677 explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. ...
- Mysql自带profiling性能分析工具使用分享
1. show variables like '%profiling%';(查看profiling信息) 2. set profiling=1;(开启profiling) 3. 执行S ...
- Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
- 11个Visual Studio代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- .NET 11 个 Visual Studio 代码性能分析工具
原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...
- 11 个 Visual Studio 代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
随机推荐
- CentOS7.x机器安装Azure CLI2.0
安装Azure CLI 2.0的前提是:机器中必须有 Python 2.7.x 或 Python 3.x.如果机器中没有其中任何一个Python的版本,请及时安装 1.准备一台CentOS 7.3的机 ...
- centos7 安装jdk 1.8
1.下载jdk1.8 for linux的安装包 jdk-8u11-linux-x64.tar.gz,下载地址:http://download.oracle.com/otn-pub/java/jdk ...
- rpc-远程调用框架
简单框架编写 http://blog.csdn.net/u013177446/article/details/67638021 netty解决拆包粘包问题 http://www.cnblogs.com ...
- jQuery图片延迟加载插件jquery.lazyload.js
在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...
- 【转】GAMITBLOBK中固定解、浮点解、约束解、松弛解等解类型解释
在GAMIT/GLOBK的使用过程中,经常会碰到固定解.浮点解.约束解.松弛解及其相关组合解(如约束固定解)等词汇,对于初学者,一时难以弄明白其中的含义,一般只有按部就班按照教程中,怎么说就怎么弄,不 ...
- 【转】matlab针对不同格式文件的读写
本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...
- 跳转语句Break、continue
跳转语句Break.continue 1.break -跳出 作用范围:switch或循环语句; -当break语句单独存在时,下面不需要定义其他语句,因为直接被跳出,不执行下面的语句. -break ...
- 客户端putty xshell连接linux中vim不能正常使用小键盘的问题
在putty或xshell上用vi/vim的时候,开NumLock时按小键盘上的数字键并不能输入数字,而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键). 解决方法: putty:选项Te ...
- 基于 React + Webpack 的音乐相册项目(下)
上一篇我们完成了音乐相册里面的播放图片的功能,这一篇主要完成的是音乐相册里面的音乐播放器功能.最终让我们基于 React 的音乐相册图文并茂.有声有色. 我们主要从以下几个部分来展开: 数据准备 进度 ...
- srs2录制flv文件metadata不准确
测试环境:server:srs2client:librestreaming / yasea srs 配置 dvr录制24分钟flv文件. e:\flv $ ll total drwxr-xr-x Ad ...