У меня есть следующие два профиля для основного 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 дб:
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:
Sending data
Sending data
The thread is read and processing rows for a SELECT statement, and посылать данные клиенту. Потому что операции, происходящие во время этого это состояние имеет тенденцию выполнять большие объемы доступа к диску (считывания) , это состояние Часто это самое длительное состояние за время жизни конкретного запроса.
http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html
Подозреваю, что разница в скорости доступа к диску.
В первом тесте кажется, что у вас есть локальная машина, подключенная к локальному серверу БД с локальным жёстким диском. Во втором тесте вы подключаетесь к удаленному серверу БД с удаленным жестким диском (т.е. EBS).
EBS (который RDS использует для хранения) значительно медленнее чем хранение экземпляров, которое, как я полагаю, все еще может быть медленнее, чем разгруженный локальный диск на вашей рабочей станции (особенно, если у вас есть SSD).
Однако в обмен на потерю производительности вы получаете ряд преимуществ, обусловленных абстрактной природой ELB:
Именно поэтому большинство людей принимают штраф за потерю производительности. Если потеря производительности значительна, то вы можете попробовать несколько вещей: