У меня есть следующие два профиля для базового SELECT
ЗАЯВЛЕНИЕ:
select count(*) from mturk_completion;
Вот два профиля:
# My Local machine, using a local db
Status Duration
starting 0.000045
checking permissions 0.000006
Opening tables 0.000015
init 0.000011
System lock 0.000006
optimizing 0.000004
statistics 0.000011
preparing 0.000009
executing 0.000002
Sending data 0.034015 ########
end 0.000012
query end 0.000006
closing tables 0.000011
freeing items 0.000036
cleaning up 0.000010
И вот он на моем большом экземпляре AWS ec2 с использованием RDS mysql db:
starting 0.000068
checking permissions 0.000016
Opening tables 0.000028
init 0.000024
System lock 0.000018
optimizing 0.000015
statistics 0.000022
preparing 0.000022
executing 0.000012
Sending data 0.446171 #########
end 0.000036
query end 0.000018
closing tables 0.000023
freeing items 0.00009
cleaning up 0.000013
Большинство цифр сопоставимы, за исключением того, что часть отправки данных более чем в десять раз медленнее на экземпляре RDS !! Чем это можно объяснить и как я могу это исправить?
Вот информация об экземпляре RDS:
Отправка данных
Поток читает и обрабатывает строки для оператора SELECT и отправляет данные клиенту. Поскольку операции, происходящие во время этого в этом состоянии обычно выполняется большое количество обращений к диску (чтения), часто это самое продолжительное состояние за время существования данного запроса.
http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Я подозреваю, что разница в скорости доступа к диску.
В вашем первом тесте кажется, что у вас есть локальный компьютер, подключенный к локальному серверу БД с локальным жестким диском. Во втором тесте вы подключаетесь к удаленному серверу БД с удаленным жестким диском (например, EBS).
EBS (это то, что RDS использует для хранения) значительно медленнее чем хранилище экземпляров, которое, как я полагаю, может быть медленнее, чем выгруженный локальный диск на вашей рабочей станции (особенно если у вас есть SSD).
Однако в обмен на потерю производительности вы получаете ряд преимуществ, обеспечиваемых абстрактной природой ELB:
Вот почему большинство людей допускают штраф за производительность.
Если потеря производительности значительная, вы можете попробовать следующее: