pt-ioprofile分析查看mysql的真实IO情况
针对IO密集型应用做系统调优的时候,我们通常都需要知道系统cpu 内存 io 网络等系统性能 和 使用率,结合应用本身的访问量,以及 mysql的性能指标来综合分析。比如说:我们将系统压力情况分为三个阶段:从用户端开始到web server,再到mysql。
1. 客户量:我们可以从web app的访问log,查看访问量(通常会记录时间),
2. 系统指标: 对比dstat、 iostat/ mpstat pidstat 等搜集对应的系统性能指标,
3. mysql: 使用mysql status ,或者 mycheckpoint等工具搜集mysql的cache , query等数据。
但是问题来了,我们很容易搜集到了系统层、设备层的IO数据,但是缺少一个体贴的工具来告诉你应用打开了多少文件,文件读写比例,执行了多少次fsync,是随机读写还是顺序读写,另外,mysql是一个庞大而精心设计的系统,使用了一些列的方案如table cache, thread cache 等来提升IO,我们比较容易获得他的缓存量,命中率,文件数,但是却不好直观的知道它到底对物理IO设备读写了多少数据。
ioprofile就是这样一个工具,提供了直观的量化的数据来描述进程对io设备的真实读写量。
由于实现方式是使用strace注入到线程中,所以运行时需要sudo,方法如下:
sudo ./pt-ioprofile -p 8534 -c count
sudo ./pt-ioprofile -p 8534 -c sizes
2015年 04月 23日 星期四 :: CST
Tracing process ID
total read pwrite fsync open close filename
/redmine/mysql/data/mycheckpoint/sv_diff.frm
/redmine/mysql/data/mycheckpoint/sv_sample.frm
/redmine/mysql/data/ib_logfile1
/redmine/mysql/data/mycheckpoint/custom_query_view.frm
sudo ./pt-ioprofile -p 8534 -c times
2015年 04月 23日 星期四 :: CST
Tracing process ID
total pwrite fsync filename
0.100162 0.000271 0.099891 /redmine/mysql/data/ibdata1
0.003826 0.000000 0.003826 /redmine/mysql/data/ib_logfile0
sudo ./pt-ioprofile -p 8534 -c sizes -g filename
有人在生产环境中使用ioprofile时出现导致mysql挂起的现象,虽然是4年前了,但还是请谨慎使用。
以上数据输出中的 read write fread fwrite fsync 等指标分别是指什么呢? 多大的量才算正常?
read/write/fsync:
1. linux底层操作;
2. 内核调用, 涉及到进程上下文的切换,即用户态到核心态的转换,这是个比较消耗性能的操作。
fread/fwrite/fflush:
1. c语言标准规定的io流操作,建立在read/write/fsync之上
2. 在用户层, 又增加了一层缓冲机制,用于减少内核调用次数,但是增加了一次内存拷贝。
关系参看下图:

1. 对于输入设备,调用fsync/fflush将清空相应的缓冲区,其内数据将被丢弃;
2. 对于输出设备或磁盘文件,fflush只能保证数据到达内核缓冲区,并不能保证数据到达物理设备, 因此应该在调用fflush后,调用fsync(fileno(stream)),确保数据存入磁盘。
参考:
1. http://blog.yufeng.info/archives/995
2. http://blog.csdn.net/ybxuwei/article/details/22727565
pt-ioprofile分析查看mysql的真实IO情况的更多相关文章
- 查看MySQL默认字符集
MySQL默认字符集相信大家都有所了解,下面就为您介绍一下查看MySQL默认字符集的命令,希望对您学习MySQL默认字符集能有些帮助. MySQL的字符集支持(Character Set Suppor ...
- 查看mysql正在执行的SQL语句,使用profile分析SQL执行状态
http://qq85609655.iteye.com/blog/2113960 1)我们先通过status命令查看Mysql运行状态 mysql> status; -------------- ...
- 使用dstat命令的插件查看mysql的io状态
使用dstat竟然还可以查看mysql的状态, man dstat之后发现的,原来在/usr/share/dstat目录下藏有很多python脚本作为插件帮助dstat搜集各类信息. 不过通常有可能会 ...
- 通过查看mysql 配置参数、状态来优化你的mysql
mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,flush status 来查看mysql的各种性能指标. 2. 直接使用 ...
- mysql 通过查看mysql 配置参数、状态来优化你的mysql
我把MYISAM改成了INNODB,数据库对CPU方面的占用变小很多' mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,f ...
- [转]通过查看mysql 配置参数、状态来优化你的mysql
From : http://wangwei007.blog.51cto.com/68019/967278 mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status ...
- 查看Mysql执行计划
使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...
- 查看mysql字符集及修改表结构--表字符集,字段字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- px,dp,dip,sp,in,mm,pt详细分析
px,dp,dip,sp,in,mm,pt详细分析 px :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip :(devi ...
随机推荐
- mac 激活Ultra Edit16
一.文本编辑器UltraEdit 参照Ultra Edit16.10 Mac 破解下载,或者官方下载 Ultra Edit16即可 printf of=/Applications/UltraEdit. ...
- 6个html5页面适配iphone6的技巧
iphone6及iphone6plus已经出来一段时间了.很多移动端网站,以前写死body为320px的,现在估计也忙着做适配了. 大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H5页面大部分 ...
- tomcat配置项目的图片路径不在项目下的处理
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWA ...
- 【ros】.bag文件
Bags are typically created by a tool like rosbag They store the serialized message data in a file as ...
- Retrofit 2.0使用
最近在想能不能把之前项目里的网络请求改下 想通过Retrofit重构下,因为Retrofit完美兼容Rxjava后面会用到Rxjava 所以 开个坑写点 由于网上Retrofit 2.0的架构介绍很详 ...
- python内置函数 1
常用函数 abs(x) abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. >>>print abs(-100) 100 >>>print abs ...
- MVC 与 webform比较
来自:http://www.cnblogs.com/xiaozhi_5638/p/4019065.html ASP.NET Webforms Behind Code的好处和存在的问题 ASP.NET ...
- 读<jquery 权威指南>[2]-事件
1. 事件冒泡 阻止事件冒泡的两种方式: event.stopPropagation(); return false ; 2. 绑定事件——bind(type,[data],function) ty ...
- iOS开发多线程篇—GCD介绍
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
- linux下用phpize给PHP动态添加扩展
使用php的常见问题是编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,这里就需要用到phpize了. 如我想增加bcmath扩展的支持,这 ...