Описание:
Я столкнулся с проблемой производительности запроса MySQL, который эффективно выполняется на моем локальном компьютере (0,02 секунды), но занимает значительно больше времени. время выполнения в промежуточной среде. Время выполнения на стадии варьируется случайным образом; иногда это занимает около 4 секунд, а иногда превышает 10 секунд. Пример запроса:
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 для анализа запроса, и, похоже, он использует соответствующие индексы:
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>
Мне нужны идеи или предложения по дальнейшей диагностике и решению этой проблемы. Будем очень признательны за любую помощь или подсказки!
Добавлены все подробности выше
[b]Описание:[/b] Я столкнулся с проблемой производительности запроса MySQL, который эффективно выполняется на моем локальном компьютере (0,02 секунды), но занимает значительно больше времени. время выполнения в промежуточной среде. Время выполнения на стадии варьируется случайным образом; иногда это занимает около 4 секунд, а иногда превышает 10 секунд. [b]Пример запроса:[/b] [code]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; [/code] [code]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; [/code] [b]Контекст:[/b] [list] [*]Мне нужно выполнить этот запрос для разных значений user_id в цикл с использованием Python и SQLAlchemy. [*]Время выполнения непостоянно; он меняется случайным образом при многократном выполнении запроса при промежуточном этапе. [*]Я использовал оператор EXPLAIN для анализа запроса, и, похоже, он использует соответствующие индексы:[/list] [b]ОБЪЯСНИТЬ Вывод:[/b] [code]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
[/code] [b]Наблюдения:[/b] [list] [*]Запрос работает хорошо в локальной среде, но становится медленно на промежуточном сервере. [*]Профилирование показывает, что фаза выполнения занимает большую часть времени. [*]Небольшой вариант этого запроса без qid фильтр быстро работает в промежуточной среде: [/list] [code]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;
[/code] [b]Дополнительная информация:[/b] [list] [*]И table_1, и table_2 имеют индексы для столбцов, используемых в предложения JOIN и WHERE. [*]Количество ожидаемых для сканирования строк, указанное EXPLAIN, кажется разумным. [*]Я проверил это промежуточный экземпляр имеет достаточно ресурсов, и нет очевидного конфликта за ресурсы. [/list] [b]Вопросы:[/b] [list] [*]Что может привести к несогласованному выполнению запроса в промежуточной среде? [*]Почему время выполнения одного и того же запроса так сильно различается? Почему добавление дополнительного фильтра qid приводит к такой резкой разнице в производительности? [*]Существуют ли какие-либо конкретные конфигурации сервера, настройки MySQL или факторы окружающей среды, которые могут повлиять такое поведение? [/list] [b]Примечание:[/b] Когда я запускаю запрос непосредственно через phpmyadmin или через любой клиент MySQL, он выполняется быстро.< /p> Мне нужны идеи или предложения по дальнейшей диагностике и решению этой проблемы. Будем очень признательны за любую помощь или подсказки! Добавлены все подробности выше
Описание:
Я столкнулся с проблемой производительности запроса MySQL, который эффективно выполняется на моем локальном компьютере (0,02 секунды), но занимает значительно больше времени. время выполнения в промежуточной среде. Время выполнения на...
Описание:
Я столкнулся с проблемой производительности запроса MySQL, который эффективно выполняется на моем локальном компьютере (0,02 секунды), но занимает значительно больше времени. время выполнения в промежуточной среде. Время выполнения на...
В моей базе данных есть таблица, содержащая около 400 тыс. строк, и я выполняю следующий оператор (запрос, который выполняет laravel):
select * from `activities` where `device_id` = ? and `battery_level` is not null order by `created_at` desc limit...
В моей локальной среде с использованием стандартного вызова API Process_request вызов запроса требуется от 8 до 20 секунд. В моей оболочке EC2 Python я смог запустить ее один раз, но потребовалось 34 секунды, что недопустимо для моего варианта...
В моей локальной среде с использованием стандартного вызова API Process_request вызов запроса требуется от 8 до 20 секунд. В моей оболочке EC2 Python я смог запустить ее один раз, но потребовалось 34 секунды, что недопустимо для моего варианта...