Аврора MySQL - Медленный оператор CREATE TABLE в сохраненном процессе - PullRequest
1 голос
/ 29 апреля 2020

Мы боролись с медленным (никогда не заканчивающимся) запуском хранимых процедур. Мы сосредоточились на конкретном CREATE TABLE ... SELECT ... from table с некоторыми объединениями.

Когда мы выполняем этот запрос самостоятельно, он последовательно завершается примерно через 14 секунд. Когда он запускается как часть Stored Pro c, он не завершится даже после нескольких часов.

Что мы нашли, если мы возьмем весь код из хранимого Pro c и просто запустим его как обычный SQL скрипт тогда тоже медленный. Далее в хранимых таблицах pro c создаются из базовых данных и подготавливаются для использования в Stored Pro c.

. Мы работаем с 5.7.mysql_aurora.2.07.2 и протестированы на 5.7.mysql_aurora. .2.07.1 также. Я подозреваю, что нам нужно настроить некоторые параметры базы данных, но мне не хватает опыта работы с InnoDB и Aurora.

Мы мигрировали из MyISAM в Aurora, где мы теперь используем InnoDB, и любые рекомендации о том, что может быть причиной этого, были бы очень признателен.

РЕДАКТИРОВАТЬ: Я пытался изменить утверждения с CREATE TABLE ... SELECT ... from table на CREATE TABLE, а затем INSERT INTO, что не имеет значения.

То, что, похоже, сработало, это используйте create table A (PRIMARY KEY (name)) select ... для всех созданных таблиц вместо того, чтобы сначала создавать таблицу и использовать оператор ALTER для добавления ключа.

Я озадачен, почему этот режим работает ???

1 Ответ

0 голосов
/ 29 апреля 2020

Это звучит как проблема блокировки таблицы. Обычно

CREATE TABLE AS SELECT ... FROM table_name ...

приводит к тому, что исходная таблица (имя_таблицы) нуждается в блокировке. Попробуйте разбить CREATE и SELECT, т.е.

CREATE TABLE table_name ...;
INSERT INTO table_name SELECT ...;
...