一、描述
生产系统数据库性能压力比较大,cpu iowait 40%~50% ,数据库系统登录难。需要查出来是什么进程导致的,最好是找到是什么文件引起的。
二、操作过程
1.因为是数据库系统,很容易知道是mysqld引起的,使用glances系统工具。
2. pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析。通过ps aux|grep mysqld 找到 mysqld进程对应的进程号,通过pt-ioprofile查看哪个文件的IO占用时间最多,对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 --cell=sizes,该参数将结果已 B/s 的方式展示出来:
# ps -ef|grep mysql
# pt-ioprofile --profile-pid=113106 --cell=sizes
Mon May 15 13:48:36 CST 2017
Tracing process ID 113106
total pread read pwrite write fsync open close lseek ftruncate filename
2032296082 0 3424256 0 146 0 0 0 2028871680 0 /data/disk1/mysqllogs/relay-bin.002231
486457344 482263040 0 4194304 0 0 0 0 0 0 /data/disk1/mysqldata/dcs@002dpartition/t_warn_info_history#P#p201705.ibd
148111360 540672 0 147570688 0 0 0 0 0 0 /data/disk1/mysqldata/ibdata1
19590656 0 0 19590656 0 0 0 0 0 0 /data/disk1/mysqldata/ib_logfile0
6725632 0 162765 0 0 0 0 0 6562867 0 /data/mysqllogs/relay-bin.002231
3429905 0 0 0 3429905 0 0 0 0 0 /data/disk1/mysqllogs/mysql-bin.000431
35824 0 0 0 17912 0 0 0 17912 0 /data/disk1/mysqldata/innodb_status.113106
32768 32768 0 0 0 0 0 0 0 0 /data/disk1/mysqldata/mysql/slave_master_info.ibd
561 0 66 0 0 0 0 0 495 0 /data/mysqllogs/relay-bin.index
448 0 0 0 448 0 0 0 0 0 /data/mysqllogs/relay-bin.002232
314 0 0 0 314 0 0 0 0 0 /data/disk1/mysqllogs/error.log
0 0 0 0 0 0 0 0 0 0 /data/mysqllogs/relay-bin.~rec~
0 0 0 0 0 0 0 0 0 0 /data/mysqllogs/relay-bin.index_crash_safe
0 0 0 0 0 0 0 0 0 0 /data/mysqllogs/
0 0 0 0 0 0 0 0 0 0 /data/disk1/mysqllogs/relay-bin.index
#
通过上面很容易发现是因为复制引起的性能问题,进一步再去查看复制状态即可,结合业务分析为什么会出现周期性的插入波峰。
最终处理只是修改了数据库的个别参数,主要是内存相关的参数,明天需要继续观察。本来计划要升级一下系统配置,如果通过分析修改数据库、系统系统参数解决了此问题。那么才能体现DBA的价值~