Назад | Перейти на главную страницу

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

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

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

mysql> SHOW PROCESSLIST;

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

Есть идеи, что вызывает это?

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

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

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