Попытка устранить проблему с таинственным узким местом дискового ввода-вывода, вызванным MySQL.
Я использую следующие команды для проверки скорости чтения/записи диска:
#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, чтобы ни один из моих обычных процессов не выполнял запросы, убил веб-сервер, который обычно работает, и убил mysqld.
Когда я запускаю тест чтения без запуска mysqld, я получаю 1073741824 bytes (1.1 GB) copied, 2.19439 s, 489 MB/s
. Стабильно около 450-500 МБ/с.
Когда я запускаю резервное копирование службы mysql, а затем снова запускаю тест чтения, я получаю 1073741824 bytes (1.1 GB) copied, 135.657 s, 7.9 MB/s
. Стабильно около 5 МБ/с.
Запуск show full processlist
в mysql не показывает никаких запросов (и я все равно отключил все, что будет запускать запросы). На вкладке «Состояние сервера» MySQLWorkbench я вижу, что чтение InnoDB колеблется между 30–200 операциями чтения в секунду и 3–15 операциями записи в секунду, даже если запросы не выполняются.
Если я запущу iotop -oPa
, я увижу, что mysqld работает со скоростью чтения диска 1 МБ в секунду, когда запросы не выполняются. Это кажется большим, учитывая, что запросы не выполняются, но в то же время этого недостаточно, чтобы моя команда dd
выполнялась так долго... Единственная другая вещь, выполняющая disk io, это jbd2/sda3-8
.
Не уверен, что это связано, но если я пытаюсь убить сервер mysql с помощью service mysql stop
, он говорит: «Попытка остановить MySQL истекла», и процесс mysqld продолжает работать, но я больше не могу подключиться к БД. Я должен использовать kill -9
, чтобы убить процесс mysqld и перезапустить сервер.
Все это кажется непонятным. Этот сервер выполнял усиленный анализ журналов, вставки и выборки больших объемов в течение нескольких месяцев, пока в прошлые выходные мы не начали сталкиваться с этим узким местом дискового ввода-вывода.
Как я могу узнать, почему MySQL так много читает с диска, когда он по существу простаивает?