As conexões de rede do MySQL estão lentas

0

Eu configurei 3 máquinas conectadas a um roteador (via WI-FI). Eu tenho o servidor MySQL instalado em uma máquina Core I7 com boa quantidade de memória. e estou Consultando de outras máquinas para extrair dados do servidor.

Em uma tabela com mais de 100.000 entradas, a consulta é executada em 0,4 segundos no servidor, no entanto, a mesma consulta leva quase 3 segundos para ser executada na máquina cliente.

O que estou perdendo? Por que a execução da mesma consulta (select * from tableName) leva muito tempo, quando executada a partir de uma máquina cliente.

Obrigado pelos comentários. Eu testei a mesma consulta em ambas as máquinas, definindo o limite para 10 linhas. O tempo consumido é menor que 0,01 MS. Assim, para conjuntos de dados mais curtos, o tempo é inline, no entanto, quando as tabelas completas são consultadas, há uma diferença significativa no tempo.

Minha velocidade de rede teórica é de 150 MBps, mas ainda assim as consultas demoram muito tempo. Alguma sugestão sobre como isso poderia ser melhorado? Ter um interruptor e conectar todas as máquinas para alternar? vai resolver o problema?

Não há outros processos em execução no servidor e no cliente. Fechei todos os aplicativos e estou tentando depurar o problema com lentidão. Desde já, obrigado.

    
por kris123456 13.10.2016 / 18:47

2 respostas

0

select * from tableName é uma consulta muito vaga (obtenha TODOS os dados da tabela). Se a tabela tiver mais de 100.000 linhas, o servidor provavelmente retornará muitos dados. Se o tamanho total dos dados retornados for grande, a transferência para uma máquina remota levará muito mais tempo do que apenas despejá-los no servidor local.

Tente aumentar a precisão de suas consultas para que elas retornem menos dados. I.E., se você precisar apenas de "Nome" e "Endereço" da tabela, tente algo como Select Name,Address from tableName , de modo que você não esteja recebendo também um monte de campos / dados que não serão usados.

A (única) outra maneira de acelerar significativamente é aumentar a velocidade da conexão de rede entre o servidor e o (s) cliente (s).

    
por 13.10.2016 / 19:11
0

O que pode estar faltando é como você está consultando o banco de dados ... por exemplo, é o cliente desconhecido "puxando" todos os dados do servidor [e talvez bloqueando a tabela como ela faz] & em seguida, exibindo os resultados -vs- o servidor fornecendo apenas os dados necessários [e não bloqueando a tabela, ou travando apenas interno à solicitação do servidor].

Com relação ao bloqueio & a quantidade de dados "puxados" ... depende de como a sua execução da consulta ... com relação ao bloqueio, isso depende das configurações padrão; porque, em alguns casos, até mesmo uma consulta de seleção pode precisar bloquear as tabelas para garantir uma agregação válida em consultas de longa execução ... Além disso, quando você está falando JOINs, é "ingressar" na memória do cliente local ou no servidor? Há um caso de negócios para ambos. Normalmente, em casos como o seu (onde há grandes quantidades de dados sendo operados), é o caso ideal para SPROCs & UDFs (funções definidas pelo usuário). Você já tentou criar SPROCs & UDFs? (somente passando de volta um resultado e / ou status.)

O que eu tentaria fazer é executar um procedimento armazenado (que internamente tem exatamente o mesmo SQL que o SQL "manual" do cliente) do PC remoto e ver se você ainda tem esse atraso.

Se isso não resolver o problema, você realmente precisará incluir detalhes mais específicos não apenas sobre a consulta, mas também sobre como "empilhá-la" para consultá-la no computador remoto.

    
por 13.10.2016 / 19:01