在写入繁重的Solaris 10服务器(运行安装有MySQL守护程序的多个区域)上运行DTT iotop时,会得到以下输出:
UID PID PPID CMD DEVICE MAJ MIN D BYTES
70 26636 1 mysqld sd1 10 64 R 360448
70 25940 1 mysqld sd1 10 64 R 530432
0 5 0 zpool-rpool sd1 10 64 W 17250816
这里困扰我的是zpool-rpool占用了大部分io。 我能做些什么来看看哪个MySQL或其他进程确实占用了IO – 更详细的分解? 如果zpool-rpool表示“写入ZFS”,那么iotop在这里真的不帮我… 🙂
谢谢!
您可能会发现Brendan Gregg最近关于文件系统延迟的博客系列很有用。 他展示了一些用于调查syscall提供程序的文件系统使用情况的脚本(与iotop使用的io提供程序相比,它应该更可靠地识别负责任的进程)。
例如,第4部分中显示的syscall-read-zfs.d脚本可以很容易地修改,以探测pid而不是execname的写入和聚合。
该脚本的输出也可能比iotop更有用,因为它显示了每个进程的IO数量和IO延迟分布。 对于数据库而言,读取和同步写入的延迟是性能痛苦的直接测量 – 比每秒字节更容易解释。
如果您有时间的话,我还强烈build议在BayLISA上观看他的演示文稿,以便他们展示如何调查MySQL查询性能问题。
如果您想要测量哪些应用程序的读/写最多,则需要在系统调用级别进行测量。 在设备层面,只有内核线程正在工作。