Запрос MySQL медленный на промежуточном экземпляре, но быстрый на локальном — проблема с производительностьюPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Запрос MySQL медленный на промежуточном экземпляре, но быстрый на локальном — проблема с производительностью

Сообщение Anonymous »

Описание:
Я столкнулся с проблемой производительности запроса 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;

Код: Выделить всё

CREATE TABLE table_1 (
id int NOT NULL AUTO_INCREMENT,
qid int NOT NULL,
original_text text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
resolved_text text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
resolved_values json DEFAULT NULL,
PRIMARY KEY (id),
KEY qid_index (qid),
KEY original_text_index (original_text(256)),
KEY resolved_text_index (resolved_text(256))
) ENGINE=InnoDB AUTO_INCREMENT=4644665
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE table_2 (
id int NOT NULL AUTO_INCREMENT,
users_id int NOT NULL,
variation_id int NOT NULL,
PRIMARY KEY (id),
KEY uid_index (users_id),
KEY var_index (variation_id)
) ENGINE=InnoDB AUTO_INCREMENT=437879832
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Контекст:
  • Мне нужно выполнить этот запрос для разных значений 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 или факторы окружающей среды, которые могут повлиять такое поведение?
Примечание: Когда я запускаю запрос непосредственно через phpmyadmin или через любой клиент MySQL, он выполняется быстро.< /p>
Мне нужны идеи или предложения по дальнейшей диагностике и решению этой проблемы. Будем очень признательны за любую помощь или подсказки!
Добавлены все подробности выше

Подробнее здесь: https://stackoverflow.com/questions/790 ... ance-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»