MySQL тратит слишком много времени на очистку таблиц tmp

MySQL тратит слишком много времени на очистку таблиц tmp

Я запускаю некоторые миграции Django на экземпляре AWS RDS MySQL. Моя команда очень тщательно протестировала миграции, и они прошли нормально (даже занимая менее 30 минут при запуске на наших ноутбуках с копией наших производственных данных).

Теперь, когда мы переносим производственную базу данных, это занимает более 2 часов. Когда я запускаю:

mysql> SHOW PROCESSLIST;

Я вижу активный процесс, и он что-то делает, но очень медленно. Наши миграции находятся в середине миграции данных, и операторы SELECT (мы извлекаем строки через ORM партиями по 100) занимают до 32 секунд каждый. Последние 30 секунд тратятся на состояние «удаление таблицы tmp».

Есть идеи, что является причиной этого?

решение1

мы извлекаем строки через ORM партиями по 100

Неэффективные запросы для пакетирования данных. Поскольку СУБД использует временные таблицы, ей приходится проверять гораздо, НАМНОГО больше данных, чем включено в выходной набор данных, и большая их часть отбрасывается.

Перейдите на StackOverflow и опубликуйте свою схему и запросы, которые вы используете для извлечения данных, чтобы получить более конкретные советы. Однако IME и ORM в принципе настолько несовершенны, что обычно проще перейти на фабрики, чем пытаться заставить их работать эффективно/надежно.

Связанный контент