outras transações de rede são lentas nos servidores de 64 bits? Pode ser algo tão simples quanto um driver de rede ruim ou desatualizado.
Temos uma configuração que estamos usando para diferentes clientes: um programa que se conecta a um servidor Firebird em uma rede local.
Até agora usamos principalmente processadores de 32 bits rodando o Ubuntu LTS (recentemente atualizado para 10.04).
Agora nós introduzimos servidores rodando em processadores de 64 bits, rodando o Ubuntu 10.04 64bits.
De repente, algumas consultas são executadas mais lentamente do que costumavam.
Em suma: executar a consulta localmente funciona bem em servidores de 64 bits e 32 bits, mas ao executar as mesmas consultas na rede, o servidor de 64 bits fica repentinamente muito mais lento.
Fizemos algumas verificações com conexões locais e remotas para servidores de 64 bits e 32 bits, usando bancos de dados idênticos e consultas idênticas, sendo executados no Flamerobin.
Executar a consulta localmente leva um tempo insignificante: 0,008s no servidor de 64 bits, 0,014s nos servidores de 32 bits. Então os próprios servidores estão funcionando bem.
Executando as consultas pela rede, o servidor de 64 bits de repente precisa de até 0,160s para responder, enquanto o servidor de 32 bits responde em 0,055s.
Assim, os servidores mais antigos são duas vezes mais rápidos na rede, apesar de os servidores mais recentes serem duas vezes mais rápidos se executados localmente.
Além disso, a configuração é idêntica. Todos os servidores estão executando a mesma instalação do Ubuntu 10.04, mesma versão do Firebird e assim por diante, a única diferença é que alguns são 64 e 32 bits.
Alguma ideia?
Eu tentei pesquisar no Google, mas não consegui reclamar que o Firebird 64bit é mais lento que o Firebird 32bit, exceto que o log de alterações do Firebird 2.1 menciona que há uma nova API de rede que é duas vezes mais rápida, assim que drivers são atualizados para usá-lo.
Então, eu posso imaginar que o driver de 64 bits ainda está usando a API antiga, mas isso é um pouco exagerado, eu acho.
Thanx antecipadamente para qualquer resposta! :)
outras transações de rede são lentas nos servidores de 64 bits? Pode ser algo tão simples quanto um driver de rede ruim ou desatualizado.
Certifique-se das seguintes coisas em servidores antigos e novos
Verificar a escala da janela em servidores antigos e novos
O buffer de leitura e gravação para uma conexão
o tamanho dos buffers pode ser ajustado conforme necessário
root@x:~# sysctl -A | grep net | grep mem
Verifique essas variáveis
Eles especificam o uso máximo do buffer de memória padrão para todas as conexões de rede no kernel
net.core.wmem_max = 131071
net.core.rmem_max = 131071
net.core.wmem_default = 126976
net.core.rmem_default = 126976
Estes especificam o uso da memória do buffer específico para conexões tcp
net.ipv4.tcp_mem = 378528 504704 757056
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
Os três valores especificados são tamanhos de buffer "min default max". Então, para começar, o Linux usará os valores padrão de buffer de leitura e gravação para cada conexão. À medida que o número de conexões aumenta, esses buffers serão reduzidos (no máximo até o valor mínimo especificado). O mesmo acontece com o valor máximo do buffer.
Estes valores podem ser definidos usando este sysctl -w KEY=KEY VALUE
Verifique outros parâmetros de rede TCP
Experimente estes
no servidor antigo
sysctl -a | grep ^net.ipv4 >s1
no novo servidor
sysctl -a | grep ^net.ipv4 >s2
agora faça um diff dos arquivos s1 e s2 (depois de copiar o s2 para o servidor antigo
diff s1 s2
Isso mostrará a diferença nos parâmetros
verifique o status do iptables
iptables -L
iptables -t nat -L
nos dois servidores
Verifique também o status do selinux
Tags networking 64-bit ubuntu firebird