Я планирую перейти с общего размещенного сервера на установку AWS (EC2 для apache/php, RDS для MySQL).mysql query slow после MyISAM -> InnoDB и переход на AWS
У меня была бета-версия моего сайта php/mysql, работающего на общем сервере более года. Одна страница, в частности, всегда работала быстро (возможно, < 3 секунды для полной загрузки) в браузере.
При подготовке к перемещению я изменил базу данных и все таблицы от MyISAM до InnoDB. Я также переключил набор символов по умолчанию на utf8mb4 (был латинский-1 или что-то еще) и сопоставление с utf8mb4_unicode_ci. Были несколько столбцов, которые были чем-то вроде varchar2 (400), которые были проиндексированы, которые получили ошибку символа> 191 (из-за перехода от 3 байт-> 4 байта с utf8mb4). Я вошел и вручную включил только эти столбцы в UTF-8/utf_unicode_ci. Кажется, что все выглядит нормально (нет явных ошибок)
Теперь я переместил копию сайта/DB в AWS. Большинство страниц загружаются штрафом. Это, в частности, требуется навсегда для загрузки (> 5 минут). У меня есть довольно маленькие экземпляры EC2 и экземпляры RDS, поэтому я понимаю, что это может быть проблемой, но я единственный, кто использует сайт (для одного запроса), а вся база данных - < 70MB.
Запуск плана объяснения показывает, что в большинстве случаев используются ключи (индексы?) И одна «производная» таблица с 74 тыс. Строк. 74k - очень маленький набор данных. Я гораздо больше знаком с Oracle, объясняющим планы, поэтому мне сложно понять, что происходит.
Я попытался запустить исходную страницу на общем сервере хостинга, и он стал намного медленнее! Поэтому у меня нет оснований полагать, что это проблема AWS.
Я знаю, что MyISAM немного быстрее в простых сценариях, но не может быть 10000000000000x быстрее, чем мое новое использование InnoDB?
Что-то не так с преобразованием, где он пытался индексировать varchars с> 191 символом? возможно ли это как-то сломать систему/таблицы? Запросы будут завершены, если вы дадите им массу времени, но они не должны быть такими медленными. Я бы подумал, что даже если индексы были обжарены, и он выполнял полные сканирующие таблицы на 74 тыс. Строк, он не должен даже ломать пот.
Мысли?
Edit: Найдена эта тема: https://dba.stackexchange.com/questions/75091/why-are-simple-selects-on-innodb-100x-slower-than-on-myisam Плакат, кажется, есть подобный опыт замедления. Я не могу использовать то же самое решение, что и он. Это безумие думать, что мне придется поместить все столбцы, которые я хочу вернуть в индекс. Не так ли, что все просто принимают?
[_More conversion tips_] (https://mariadb.com/kb/ru/mariadb/converting-tables-from-myisam-to-innodb/). –