【发布时间】:2020-09-16 06:44:16
【问题描述】:
尝试解决由 MySQL 引起的神秘磁盘 io 瓶颈问题。
我正在使用以下命令来测试磁盘读/写速度:
#write
dd if=/dev/zero of=/tmp/writetest bs=1M count=1024 conv=fdatasync,notrunc
#read
echo 3 > /proc/sys/vm/drop_caches; dd if=/tmp/writetest of=/dev/null bs=1M count=1024
我重新启动了机器,禁用了 cron,所以我通常的进程都没有运行查询,杀死了通常运行的 Web 服务器,并杀死了 mysqld。
当我在没有运行 mysqld 的情况下运行读取测试时,我得到1073741824 bytes (1.1 GB) copied, 2.19439 s, 489 MB/s。始终保持在 450-500 MB/s 左右。
当我开始备份mysql服务,然后再次运行读取测试,我得到1073741824 bytes (1.1 GB) copied, 135.657 s, 7.9 MB/s。始终保持在 5MB/秒左右。
在 mysql 中运行 show full processlist 不会显示任何查询(而且我禁用了所有将运行查询的东西)。在 MySQLWorkbench 的 Server Status 选项卡中,我可以看到 InnoDB 读取在每秒 30-200 次读取和每秒 3-15 次写入之间波动,即使没有运行查询。
如果我运行iotop -oPa,我可以看到当没有查询运行时,mysqld 每秒读取 1MB 磁盘。考虑到没有查询正在运行,这似乎很多,但同时这似乎不足以导致我的 dd 命令花费这么长时间......执行磁盘 io 的唯一另一件事是 jbd2/sda3-8。
不确定它是否相关,但如果我尝试使用service mysql stop 终止 mysql 服务器,它会显示“尝试停止 MySQL 超时”,并且 mysqld 进程继续运行,但我无法再连接到数据库。我必须使用kill -9 来杀死mysqld 进程并重新启动服务器。
所有这一切似乎都出乎意料。这台服务器几个月来一直在进行繁重的日志解析、大量插入和选择,直到上周末我们开始看到这个磁盘 io 瓶颈。
我怎样才能找出为什么 MySQL 在它基本上空闲时会进行如此多的磁盘读取?
【问题讨论】:
标签: mysql performance ubuntu disk-io