Превышение емкости базы данных Aurora из-за ожидания "/ io / file / myisam / kfile" - PullRequest
0 голосов
/ 18 февраля 2020

Этим утром один из наших кластеров Aurora внезапно начал испытывать большие задержки, медленные запросы и был объявлен как превышающий избыточную емкость - с 20 сеансами для экземпляра db.r5.large, который имеет только 2 ЦП.

Там нет ни изменений кода, ни развертывания, ни фонового процесса, ни какой-либо другой причины, которую мы можем определить. Более высокая задержка прерывистая, происходит каждые 10 минут и длится примерно столько же. Мониторинг Авроры не очень помогает, единственное изменение примечания - более высокая задержка по всем запросам (выбор, обновление и удаление).

enter image description here

В метриках производительности, в случаях, когда пики использования - мы видим, что из общего числа 20 сеансов они относятся почти исключительно к io/file/myisam/kfile Подождите. Исследования в Интернете дали очень мало, и поэтому я несколько озадачен тем, что это значит, и как go выяснить причину проблемы. Глядя на запросы SQL, запускаемые во время пиков, их медленное время выполнения в большей степени вызвано нерегулярной проблемой, а не ее причиной.

Итак, мой вопрос: может ли кто-нибудь объяснить, что ' myisam / kfile 'Подождите, и как я могу использовать эти знания, чтобы помочь диагностировать причину проблемы здесь?

Мне кажется, что это один из тех редких случаев, когда экземпляр AWS необъяснимым образом становится мошенником в уровень, ниже которого мы можем напрямую управлять, и он решается только путем раскрутки нового экземпляра (даже если все остальное равно с точки зрения конфигурации и кода). Тем не менее, я хотел бы лучше понять проблему здесь, особенно когда ни одна из наших таблиц БД не является MyISAM, все из которых являются innoDB.

1 Ответ

0 голосов
/ 18 февраля 2020
  • Есть ли таблица с именем kfile? Насколько оно большое? Какие операции выполняются?
  • Во время возникновения проблемы выполните SHOW FULL PROCESSLIST;, чтобы увидеть, что работает. Это может дать хорошую подсказку.
  • Если медленный журнал включен, посмотрите на него вскоре после того, как проблема утихла; вероятно, непослушный запрос будет в конце списка. Publi sh pt-query-digest path_to_slowlog. Первые один или два запроса, скорее всего, будут злодеями.
  • Проверьте SHOW ENGINE INNODB STATUS;. Возле фронта будет «последний тупик». Это может быть подсказкой.
  • В большинстве ситуаций большинство графиков не дают никакой полезной информации. Когда что-то делает go неправильно, неясно, на какой график смотреть. Я бы посмотрел на графики, которые выглядят «по-другому» в синхронизации c с проблемой. Тот, который вы показываете нам, возможно, указывает на то, что есть 20-секундный тайм-аут, и все застряли, пока не достигнут этого тайм-аута.
  • Вы запускаете какой-либо ALTERs? Когда происходит резервное копирование?
  • Используете ли вы MyISAM? Не. То, что ENGINE не допускает параллелизма, может привести к накоплению множества запросов. Подробнее о конвертации в InnoDB: http://mysql.rjweb.org/doc.php/myisam2innodb
...