针对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日 星期四 17:55:35CST

Tracing process ID8534total read pwrite fsync open close filename613878 613878 0 0 0 0 /redmine/mysql/data/mycheckpoint/sv_diff.frm406924 406924 0 0 0 0 /redmine/mysql/data/mycheckpoint/sv_sample.frm18432 0 18432 0 0 0 /redmine/mysql/data/ib_logfile13029 3029 0 0 0 0 /redmine/mysql/data/mycheckpoint/custom_query_view.frm

sudo ./pt-ioprofile -p 8534 -c times

2015年 04月 23日 星期四 17:54:09CST

Tracing process ID8534total pwrite fsync filename0.100162 0.000271 0.099891 /redmine/mysql/data/ibdata10.003826 0.000000 0.003826 /redmine/mysql/data/ib_logfile0

sudo ./pt-ioprofile -p 8534 -c sizes -g filename

以上数据输出中的 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

原文:http://www.cnblogs.com/ToDoToTry/p/4451281.html

mysql查看io情况_pt-ioprofile分析查看mysql的真实IO情况相关推荐

  1. 【169期】面试官:同学,分析一下MySQL/InnoDB的加锁过程吧

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 17 分钟. 来自:cnblogs.com/crazylqy/p/7611069.html Hello,大家好,我是良月柒. ...

  2. mac mysql查看本地端口占用,mac下面查看端口占用进程情况

    在linux下面有netstat可以查看指定端口被哪些进程占用,但是mac下面就不好用了,看不到进程号. mac下面可以使用lsof来查看端口被哪个进程占用,比如查看80端口被占用情况: lsof - ...

  3. mysql io 100_MySQL服务器 IO 100%的案例分析

    [问题] 有台MySQL 5.6.21的数据库实例以写入为主,IO %util接近100% 写入IOPS很高 [分析过程] 1.通过iotop工具可以看到当前IO消耗最高的mysql线程 2.查看线程 ...

  4. ceph bluestore 源码分析:ceph-osd内存查看方式及控制源码分析

    文章目录 内存查看 内存控制 内存控制源码分析 通过gperftools接口获取osd进程实际内存 动态设置cache大小 动态调整cache比例 trim释放内存 本文通过对ceph-osd内存查看 ...

  5. MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

    MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...

  6. mysql查看binlog_MySQL的binlog数据如何查看

    binlog介绍binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式基于 ...

  7. java gc 时间_Java GC日志查看,GC日志时间分析

    Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...

  8. linux查看硬盘使用情况什么意思,linux 查看硬盘使用情况

    在windows系统中,我们可以很容易的查看磁盘的使用情况,在linux系统中,我们可以使用命令来查看磁盘使用情况. 1.df命令 作用:用来查看硬盘的挂载点,以及对应的硬盘容量信息.包括硬盘的总大小 ...

  9. Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件

    文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...

最新文章

  1. Linux 小知识翻译 - 「cron」
  2. js获取table的某个单元格的数据
  3. python识别12306验证码_Python3.4实现的12306最新验证码识别
  4. WebSphere Application Server v6中的问题诊断以及日志策略
  5. 嵌入式linux和pc机的linux对照
  6. 函数平移口诀_初三二次函数平移规律的口诀
  7. sftp api java_使用JSch实现SFTP文件传输
  8. 【HDOJ2087】剪花布条(KMP)
  9. a59s刷机包卡刷 oppo_OPPO A59S刷机包下载|OPPO A59S刷机包官方下载-太平洋下载中心...
  10. C++课设:GUI电话簿程序
  11. 图片转为PDF怎么弄
  12. iOS-企业级开发者账号发布流程
  13. 2014网易运营工程师笔试题(邮件运维)--题解--第二天
  14. Elasticsearch安装操作步骤
  15. SpringBoot RabbitMQ 整合使用
  16. Axure自定义Echarts交互图
  17. 查看表空间和表的使用率
  18. windows上搭建IOS开发环境
  19. 人生第一个 Offer :作为算法工程师,去大公司 or 创业公司?
  20. 深入理解计算机系统笔记_程序的机器级表示_3.9异质的数据结构

热门文章

  1. JAVA逻辑运算符练习
  2. 《序列》游戏攻略【43~48】
  3. dd命令制作光盘映像
  4. 【项目实战】Java 开发 Kafka 生产者
  5. 一个拥有下载加速、BT 种子、自动提取网页视频等功能的开源工具
  6. XSS注入原理以及一些绕过姿势
  7. 攻防世界—APK-逆向2
  8. python回调函数的作用是_回调函数的意义以及python实现
  9. HAL_UART_Receive_IT()与UART_Receive_IT()
  10. linux重定向合并,cat命令利用linux重定向合并文件