Sending data
The thread is reading and processing rows for a SELECT statement, and sending data to the client. Because operations occurring during this this state tend to perform large amounts of disk access (reads), it is often the longest-running state over the lifetime of a given query.
Eu suspeito que a velocidade de acesso ao disco é a diferença.
No seu primeiro teste, parece que você tem uma máquina local conectada a um servidor de banco de dados local com um disco rígido local. Em seu segundo teste, você está se conectando a um servidor de banco de dados remoto com um disco rígido remoto (ou seja, EBS).
O EBS (que é o que o RDS usa para armazenamento) é significativamente mais lento do que o armazenamento de instâncias, que imagino ainda pode ser mais lento que um disco local descarregado em sua estação de trabalho (especialmente se você tiver um SSD).
No entanto, em troca da perda de desempenho, você obtém vários benefícios possibilitados pela natureza abstrata do ELB:
- A capacidade de tirar instantâneos da sua instância e lançar novas instâncias a partir do seu instantâneo
- A capacidade de redimensionar seu disco
- A capacidade de alterar o desempenho do seu disco (via IOPS provisionado)
- A capacidade de sua instância do RDS ser movida de forma transparente para um novo host, o que pode ocorrer durante uma reinicialização ou alteração de tipo de instância
É por isso que a maioria das pessoas aceita a penalidade de desempenho.
Se a perda de desempenho for significativa, você poderá tentar algumas coisas:
- IOPS provisionados
- Execute sua própria instância do MySQL no EC2 usando o armazenamento de instâncias. No entanto, eu não recomendo isso, pois seria muito difícil evitar a perda de dados se a sua instância for interrompida e você não conseguirá redimensionar o disco se os dados aumentarem.
- Execute sua própria instância do MySQL no EC2 usando o EBS em RAID
- Escale horizontalmente, adicione réplicas de leitura se o IO no seu mestre estiver se tornando um gargalo
- Implemente o armazenamento em cache de dados no seu aplicativo