MySQL profiling的用法
来源:互联网 发布:ppt数据图表制作 编辑:程序博客网 时间:2024/06/18 06:54
MySQL数据库最常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。今天我们不讨论服务器硬件的性能瓶颈,只是谈谈MySQL系统本身,通常需要对数据库进行分析,常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
这个是一系列的文章,今天只谈SHOW PROFILE Syntax。通过它我们可以清楚的知道某条Query的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?具体的做法如下:
1.开启profiling参数
set profiling=1;
2.执行Query
select * from a;
3.获取系统中保存的所有 Query 的 profile 概要信息
show profiles;
4.针对单个 Query 获取详细的 profile 信息。
show profile all for query 1;
在所有列中,我们只关心Status、Duration这两列。status:是profile里的状态,duration:是status状态下的耗时。因此我们关注的就是那个状态最耗时,这些状态中那些可以优化。在profile中,下面几种状态是需要重点关注的,而且大多数可以通过创建合适的索引就能完成优化。
状态建议System lock确认是由于哪个锁引起的,通常是因为MySQL或InnoDB内核级的锁引起的建议:如果耗时较大再关注即可,一般情况下都还好Sending data从server端发送数据到客户端,也有可能是接收存储引擎层返回的数据,再发送给客户端,数据量很大时尤其经常能看见备注:Sending Data不是网络发送,是从硬盘读取,发送到网络是Writing to net
建议:通过索引或加上LIMIT,减少需要扫描并且发送给客户端的数据量Sorting result正在对结果进行排序,类似Creating sort index,不过是正常表,而不是在内存表中进行排序
建议:创建适当的索引Table lock表级锁,没什么好说的,要么是因为MyISAM引擎表级锁,要么是其他情况显式锁表create sort index当前的SELECT中需要用到临时表在进行ORDER BY排序
建议:创建适当的索引checking query cache for
querychecking privileges on cached
sending cached result to clien
storing result in query cache和query cache相关的状态,已经多次强烈建议关闭
语法如下:
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type:
ALL:显示所有的开销信息
| BLOCK IO:显示块IO相关开销
| CONTEXT SWITCHES:上下文切换相关开销
| CPU:显示用户CPU时间、系统CPU时间
| IPC:显示发送和接收相关开销信息
| MEMORY:目前没有实现
| PAGE FAULTS:显示页面错误相关开销信息
| SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息
| SWAPS:显示交换次数相关开销的信息
profile功能只能在SESSION级别使用,还做不到像SQL Server那样可以全局开启,收集一段时间后再关闭,这点有待改进。以上信息也可以通过INFORMATION_SCHEMA.PROFILING表中的信息来查看。
参考资料:
https://dev.mysql.com/doc/refman/5.7/en/show-profile.html
https://dev.mysql.com/doc/refman/5.7/en/profiling-table.html
- MySQL profiling的用法
- Mysql Profiling的使用
- MySQL Profiling 的使用
- MySQL Profiling 的使用
- MySQL Profiling的使用
- MySQL Profiling 的使用
- 性能-MySQL Profiling 的使用
- MySQL Profiling
- MySQL中profiling的使用 简介
- 发现瓶颈 - Profiling(程序剖析) -MySQL Profiling
- Profiling in MYSQL
- mysql profiling 应用
- mysql-profiling操作方式
- Mysql使用profiling分析慢sql语句的原因
- MySQL诊断分析工具 Profiling 的使用[转载]
- profiling 的使用
- Benchmarking and Profiling in MySQL
- MySQL程序剖析(Profiling)
- 在使用thinkphp框架时,在模板中尽量少使用php代码段,会导致不解析的后果
- fileReader 读取文件,并基于SparkMD5获取md5
- mingw编译Qt5正式版[亲测可用]
- fastjson核心简要总结
- 混音的一种思路
- MySQL profiling的用法
- LeetCode22:Generate Parentheses
- Scaleform 中的 3D视角相关研究
- 关于fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 警惕 InnoDB 和 MyISAM 创建 Hash 索引陷阱
- jQuery通过CSS()方法给指定的元素同时设置多个样式
- Algorithms—9.Palindrome Number
- 苹果App Store应用程序的下载链接地址
- jQuery为多元素添加统一样式