Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую всех!
Есть сервер под управлением Windows 2012 и установленным Mysql 5.7.38. Заметил такую вещь, что mysqld.exe постоянно что-то пишет в файл ibtmp1 со скоростью 6-12Мб/сек. За пару лет на ssd-винт он переписал почти 120Тб информации. Идет именно постоянная запись, чтения этого файла вообще не происходит судя по встроенному монитору Windows. Это больше похоже на какой-то глюк Mysql, т.е. запись идет даже при остановленному php/nginx - т.е. сайт тут не при чем.
Подскажите, как это исправить?
Неактивен
Откровенно говоря, такого ранее не попадалось. Пробовали обновить mysql?
И еще вопрос - при остановленном php/nginx - какие-то запросы вообще идут? show full processlist что-то показывает?
Неактивен
Да, обновил с 36 на 38 версию, но это ничего не дало.
mysql> show full processlist;
+-----+------+----------------+------+---------+------+----------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+----------------+------+---------+------+----------+-----------------------+
| 143 | root | localhost:3374 | NULL | Query | 0 | starting | show full processlist |
+-----+------+----------------+------+---------+------+----------+-----------------------+
1 row in set (0.00 sec)
Неактивен
А можете показать настройки базы? Ну и очень интересно, как вы определили, что пишет в этот файл — я такое не умею находить
Неактивен
Вам содержимое файла my.ini показать? Определи очень просто, сначала глянул СМАРТ винта и удивился: с винта должно быть много чтений и мало записей, а у меня ситуация прямо противоположная с огромным перекосом в сторону количества записанных Тб. Открыл диспетчер задач, посмотрел что идет нагрузка на винт, открыл монитор ресурсов и все как на ладони.
Неактивен
Очень странно. И это происходит без нагрузки на сервер?
Просто этот файл используется только для временных запросов, и не должен писаться без нагрузки.
Как костыль могу предложить задать в конфиге default_tmp_storage_engine=MyISAM. Это позволит увидеть, создаются ли реально временные таблицы. Но запросы все равно в show processlist должны быть видны.
Неактивен
Я еще предложил бы включить лог ВСЕХ запросов на какое-то время (при выключенном nginx) и посмотреть на него. То, что в отдельно взятый момент времени Show Full Processlist ничего не показывает - не означает, что в другое время оно также.
Неактивен
Была возможность поэкспериментировать. Вот что я выяснил:
1. Если остановить веб-сервер, то нагрузка на винт за пару минут падает до 0. Видимо монитор ресурсов показывает обращения к диску не в реальном времени, а некоторое среднее значение за минуту-две.
2. default_tmp_storage_engine=MyISAM добавил, но где посмотреть создаются или нет временные таблицы я не знаю. Подскажите, где это посмотреть?
3. Лог полных запросов включил, соответственно когда nginx выключаю в нем ничего нового не появляется.
Итог получается такой, что небольшой и относительно легкий сайт создает большую нагрузку на дисковую систему. Вся БД (в формате MyISAM) сайта занимает порядка 250-300Мб, индексы используются, запросы оптимизированы и тем не менее получается что при работу с базой данных создаются временные таблицы. Очень странно...
Отредактированно grey109 (28.06.2023 14:30:52)
Неактивен
1. Если запросы падают до нуля, то это нормально. Ibtmp используется для работы временных запросов. Если монитор запаздывает на минуты, то тогда это всё объясняет (сняли нагрузку, старые запросы доработали, новые не появились, нагрузка ушла).
2. В том же мониторе ресурсов: новые временные данные должны создаваться в файликах MYI, а не в ibtmp.
3. Хорошо, значит, никакой дополнительной нагрузки нету.
Про то, почему вообще используются временные таблицы, — надо смотреть на запросы. Проще всего сделать slow query log и поанализировать его (pt-query-digest, например). И для медленных запросов понять, почему бегает по диску. Как правило, бегает по диску тогда, когда запрос написан плохо. Например, выбирает данные в память и там сортирует, при этом размер этих данных больше tmp_table_size.
Неактивен