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性能分析工具
要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...
- Mysql自带profiling性能分析工具使用分享
1. show variables like '%profiling%';(查看profiling信息) 2. set profiling=1;(开启profiling) 3. 执行S ...
- Java 性能分析工具 , 第 1 部分: 操作系统工具
引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...
- Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
- Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解
Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解 Mysql慢查询开启 Mysql的查询讯日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应 ...
- 向mysql中批量插入数据的性能分析
MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 5 ...
- Mysql优化_第十三篇(HashJoin篇)
Mysql优化_第十三篇(HashJoin篇) 目录 Mysql优化_第十三篇(HashJoin篇) 1 适用场景 纯等值查询,不能使用索引 等值查询,使用到索引 多个join条件中至少包含一个等值查 ...
- paip.提升性能---mysql 优化cpu多核以及lan性能的关系.
paip.提升性能---mysql 优化cpu多核以及lan性能的关系. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:/ ...
- mysql中的内置函数
这里主要介绍mysql丰富的内置函数. 数学函数 数学函数相对比较简单,就是涉及一些数值的计算,这里列出数学函数的功能,仅个别给出实例. 函数 作 用 ABX(x) 返回x的绝对值 CEIL(X),C ...
随机推荐
- 11.20 HTML及CSS
<div>用于分组HTML元素的块级元素HTML表单,用于收集不同类型的用户输入<input type='radio'>:定义了表单的单选框按钮<input type=' ...
- tkinter 进度条
import tkinter as tk window = tk.Tk() window.title("我的窗口") window.geometry('600x400') var1 ...
- HDU - 5961 传递 想法,bfs
题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...
- Net Promoter Score
https://baike.baidu.com/item/净推荐值/3783368?fr=aladdin NPS(Net Promoter Score),净推荐值,又称净促进者得分,亦可称口碑,是一种 ...
- 表优化 altering table OPTIMIZE TABLE `sta_addr_copy`
表优化 altering table OPTIMIZE TABLE `sta_addr_copy` [总结] 1.实际测试的结果是,在state sqlaltering table OPTIMIZE ...
- three levels of abstraction
DATABASESYSTEM CONCEPTS SIXTH EDITION Abraham Silberschatz Yale University Henry F. KorthLehigh Univ ...
- CF576C Points on Plane 构造
正解:构造 解题报告: 先放下传送门趴QAQ 话说我jio得这题好玄学啊,,,就是,我实在觉得我这题做得完美无缺了?可就是过不去,,,而且它告诉我的奇异错误是"wrong output fo ...
- java NIO (二) 一个故事讲清楚NIO
假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) 职员打印票据,并将钱和票据返回给 ...
- Tomcat项目部署的三种方法
第一种方法如下:直接把我们的项目文件夹放到tomcat里面,在这里我自己做的是一个测试项目oa,如图 启动tomcat,打开浏览器,输入localhost/oa 即可打开你的文件,注意 :访问的时候 ...
- Win10+vs2012+cuda8.0的安装与配置
安装环境说明:NVDIA GeForce 930M.Intel(R) HD Graphics 520 显卡和cuda需要兼容匹配,我一开始下载的cuda6.5无法安装,所以又重新下了比较新的cuda8 ...