Я столкнулся с проблемой производительности запроса MySQL, который эффективно выполняется на моем локальном компьютере (0,02 секунды), но занимает значительно больше времени. время выполнения в промежуточной среде. Время выполнения на стадии варьируется случайным образом; иногда это занимает около 4 секунд, а иногда превышает 10 секунд.
Пример запроса:
Код: Выделить всё
SELECT
table1.qid,
table1.original_text,
table1.resolved_text,
table1.resolved_values
FROM table_1
INNER JOIN table_2
ON table_1.id = table_2.variation_id
WHERE table_2.users_id = 6
AND table_1.qid = 201;
- Мне нужно выполнить этот запрос для разных значений user_id в цикл с использованием Python и SQLAlchemy.
- Время выполнения непостоянно; он меняется случайным образом при многократном выполнении запроса при промежуточном этапе.
- Я использовал оператор EXPLAIN для анализа запроса, и, похоже, он использует соответствующие индексы:
Код: Выделить всё
1 SIMPLE table_1 NULL ref PRIMARY,qid_index qid_index 4 const 1 100.00 NULL
1 SIMPLE table_2 NULL ref uid_index,var_index var_index 4 table_1.id 133 0.04 Using where
- Запрос работает хорошо в локальной среде, но становится медленно на промежуточном сервере.
- Профилирование показывает, что фаза выполнения занимает большую часть времени.
- Небольшой вариант этого запроса без qid фильтр быстро работает в промежуточной среде:
Код: Выделить всё
SELECT
table1.qid,
table1.original_text,
table1.resolved_text,
table1.resolved_values
FROM table_1
INNER JOIN table_2
ON table_1.id = table_2.variation_id
WHERE table_2.users_id = 6;
- И table_1, и table_2 имеют индексы для столбцов, используемых в предложения JOIN и WHERE.
- Количество ожидаемых для сканирования строк, указанное EXPLAIN, кажется разумным.
- Я проверил это промежуточный экземпляр имеет достаточно ресурсов, и явного конфликта за ресурсы нет.
- Что может привести к несогласованному выполнению запроса в промежуточной среде?
- Почему время выполнения одного и того же запроса так сильно различается?
Почему добавление дополнительного фильтра qid приводит к такой резкой разнице в производительности? - Существуют ли какие-либо конкретные конфигурации сервера, настройки MySQL или факторы окружающей среды, которые могут повлиять такое поведение?
Мне нужны идеи или предложения по дальнейшей диагностике и решению этой проблемы. Будем очень признательны за любую помощь или подсказки!
Добавил все детали выше
Подробнее здесь: https://stackoverflow.com/questions/790 ... ance-issue