RDS Aurora (MySQL) работает ОЧЕНЬ плохо

Я переношу нашу базу данных Amazon RDS MsSQL в RDS Aurora, но меня очень впечатляет низкая производительность Aurora.

UPDATE Cars
SET CurrentDriver_id = (
            SELECT Drivers.Id 
            FROM Drivers 
            WHERE Drivers.Car_id = Cars.Id 
            ORDER BY Drivers.Id DESC 
            LIMIT 1)
WHERE Cars.Id BETWEEN 1 AND 500;

Мне пришлось ограничиться первыми 500 записями, чтобы я мог видеть результаты даже в Aurora.

Даже с ограничением в 500 строк Aurora занимает невероятно 55 секунд, в то время как MSQL для всех 70 000 записей занимает менее 1 секунды. В этом сценарии MsSQL работает почти в 8000 раз быстрее, чем Aurora.

Темой этого раздела является не сам запрос и не то, как его можно улучшить. Это простое обновление, работающее на 70 000 автомобилей и 220 000 водителей. Это не должно быть ничего для базы данных.

Cars.Id и Drivers.Id являются первичными ключами. Никаких индексов и внешних ключей.

Ожидается ли это?!

Изменить: 1. Оба RDS - db.t2.medium 2. MsSQL - это рабочий сервер с сотнями пользователей, а Aurora - только я.


person Hugo Ramos    schedule 17.08.2017    source источник
comment
Ожидается, что плохо написанные запросы будут работать плохо. Таким образом, тема действительно должна заключаться в том, как улучшить запрос.   -  person Eugen Rieck    schedule 17.08.2017
comment
Как вы переместили данные из MySQL в Aurora? Если вы сделали это вручную, вы обеспечили создание тех же самых индексов в Aurora? MySQL и Aurora работают на экземплярах одного и того же типа? Убедились ли вы, что какие-либо пользовательские параметры MySQL также были применены к Aurora? Вы выполнили optimize таблицы в Aurora после переноса данных в Aurora?   -  person Mark B    schedule 17.08.2017
comment
@EugenRieck Итак, вы говорите мне, что Aurora отлично работает только с умными запросами? Если да, то MSQL гораздо лучше, так как очень хорошо работает даже с плохо написанными.   -  person Hugo Ramos    schedule 17.08.2017
comment
@MarkB Я использовал Amazon Migration Services. Оба RDS используют только первичные ключи без дополнительных индексов. Оба работают на экземплярах db.t2.medium. Я не оптимизировал таблицы после перемещения данных. Я буду гуглить об этом.   -  person Hugo Ramos    schedule 17.08.2017
comment
Проверьте кредиты ЦП на экземпляре RDS, поскольку вы используете t2. Убедитесь, что вы не исчерпали кредиты ЦП при переносе базы данных.   -  person Mark B    schedule 17.08.2017
comment
Я посмотрю на это. Спасибо   -  person Hugo Ramos    schedule 17.08.2017


Ответы (1)


Вы можете попробовать использовать подход, который не использует подзапрос

  UPDATE Cars
  inner join Drivers on Drivers.Car_id = Cars.Id  and Cars.Id BETWEEN 1 AND 500
    SET Cars.CurrentDriver_id = Drivers.Id 
person scaisEdge    schedule 17.08.2017
comment
МОЙ БОГ! После этого Aurora занимает всего 1,3 секунды на все ряды! Спасибо за отличный ответ вместо критики. - person Hugo Ramos; 17.08.2017
comment
@HugoRamos хорошо, если ответ настолько хорош, что вы также можете оценить его как полезный - person scaisEdge; 17.08.2017