如何查找 io 峰值的原因

如何查找 io 峰值的原因

每天在大约同时,我们的mysql从服务器的IO使用率上升到100%。

我已经设置了一个脚本,每五分钟获取一次 IO 信息,以便我可以找出发生这种情况的原因。

到目前为止,我可以看到 mysql 进程导致了这个峰值,但我无法找出 mysql 实际上做了什么导致了这种情况。

使用pidstat我得到:

Linux 3.2.0-4-amd64 (-db03)        09/03/2014      _x86_64_        (24 CPU)
03:30:05 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
03:30:20 AM       418      0.00      5.06      0.00  jbd2/sda1-8
03:30:20 AM     31124    878.88  12179.08      0.00  mysqld

03:30:20 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
03:30:35 AM       418      0.00      1.07      0.00  jbd2/sda1-8
03:30:35 AM     31124   1124.80  12924.00      0.00  mysqld

Average:          PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
Average:          418      0.00      3.07      0.00  jbd2/sda1-8
Average:        31124   1001.80  12551.42      0.00  mysqld

使用pt-mysql-summary我得到:

# Processlist ################################################

  Command                        COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  Connect                               2       2   3500000   3500000
  Query                                 1       1         0         0
  Sleep                                 2       0        15         8

  User                           COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  monitoring                            2       0         0         0
  root                                  1       1         0         0
  system user                           2       2   3500000   3500000

  Host                           COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
                                        2       2   3500000   3500000
  localhost                             3       1         0         0

  db                             COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  flats_production                      2       1       600       600
  NULL                                  3       2   3500000   3500000

  State                          COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
                                        2       0         0         0
  init                                  1       1         0         0
  updating                              1       1       600       600
  Waiting for master to send eve        1       1   3500000   3500000

show full processlist没有表现出任何异常。

关于如何调试这个问题,我有什么想法吗?

答案1

使用 pt-ioprofile 检查 mysql 正在读取和写入什么。http://www.percona.com/doc/percona-toolkit/2.1/pt-ioprofile.html

相关内容