A conexão de rede para o Firebird 2.1 ficou lenta após a atualização para o Ubuntu 10.04

3

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! :)

    
por lyle 12.07.2010 / 08:41

2 respostas

1

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.

    
por 12.07.2010 / 09:21
1

Certifique-se das seguintes coisas em servidores antigos e novos

  1. Verificar a escala da janela em servidores antigos e novos

  2. 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

  3. 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

  4. verifique o status do iptables

    iptables -L 
    iptables -t nat -L 
    

    nos dois servidores

  5. Verifique também o status do selinux

por 09.01.2012 / 10:04