extrema lentidão com um banco de dados remoto no Drupal

4

Estamos tentando ampliar nossas instalações do Drupal e decidimos algumas caixas MySQL dedicadas. Infelizmente, estamos com extrema lentidão quando tentamos usar o banco de dados remoto - o tempo de carregamento da página varia de ~ 200 milissegundos a 5-10 segundos.

A latência entre os servidores é mínima - um décimo ou dois de milissegundo.

PING 10.37.66.175 (10.37.66.175) 56(84) bytes of data.
64 bytes from 10.37.66.175: icmp_seq=1 ttl=64 time=0.145 ms
64 bytes from 10.37.66.175: icmp_seq=2 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=3 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=4 ttl=64 time=0.144 ms
64 bytes from 10.37.66.175: icmp_seq=5 ttl=64 time=0.121 ms
64 bytes from 10.37.66.175: icmp_seq=6 ttl=64 time=0.122 ms
64 bytes from 10.37.66.175: icmp_seq=7 ttl=64 time=0.163 ms
64 bytes from 10.37.66.175: icmp_seq=8 ttl=64 time=0.115 ms
64 bytes from 10.37.66.175: icmp_seq=9 ttl=64 time=0.484 ms
64 bytes from 10.37.66.175: icmp_seq=10 ttl=64 time=0.156 ms

--- 10.37.66.175 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8998ms
rtt min/avg/max/mdev = 0.115/0.176/0.484/0.104 ms

Os devel.moduletimers do Drupal mostram que as consultas ao banco de dados não estão mais lentas no banco de dados remoto - cerca de 150 microssegundos, seja o servidor local ou o remoto. A criação de perfil com o XHProf mostra os tempos de execução do PHP que também não estão fora de sintonia.

O número de consultas não parece fazer diferença - parecemos o mesmo atraso de 5 a 10 segundos, independentemente de uma página ter 12 consultas ou 250.

Alguma sugestão sobre onde devo começar a solucionar problemas aqui? Estou bastante confuso.

ceejayoz
fonte

Respostas:

5

Parece que suas conexões com o banco de dados estão lentas devido a algum outro motivo. Quão rápida é uma conexão de linha de comando simples? (ou seja, não php)

Meu principal suspeito estaria falhando (= tempo limite) nas pesquisas de DNS no servidor remoto ou local; pesquisas direta e reversa.

A partir desta página : iniciar o mysqld com --skip-name-resolve

Se isso não ajudar, eu começaria a analisar as conexões TCP (tcpdump / wireshark) para isolar o problema. (em cima da minha cabeça: pesquisas locais de DNS, problemas de firewall (caixa NAT sobrecarregada em algum lugar?), perda de pacotes no link em algum lugar, ..)

Quando esse problema for resolvido, você provavelmente também desejará ter certeza de que possui conexões persistentes de banco de dados no PHP.

Joris
fonte
skip-name-resolvefez o truque. Muito Obrigado!
ceejayoz
@ceejayoz: Ainda bem que está resolvido. Você pode querer implantar serviços de DNS apropriados (ou corrigir o atual), pois há uma série de ferramentas que fazem exatamente a mesma coisa e vai implicar a mesma desaceleração
Joris
3

O motivo pode ser adicionado atrasos ao usar a resolução de nomes no servidor MySQL. Para todas as conexões, o mysql verifica o nome DNS do cliente, o que aumentará drasticamente a latência.

Você pode verificar se esse é o seu caso, se você tiver a linha skip-name-resolveno my.cnf. Se não estiver lá, adicione esta linha, reinicie o servidor e tente novamente.

j0nes
fonte
+1 e @ceejayoz que você pode considerar o uso de stunnel para criptografar o tráfego MySQL entre os servidores apenas para estar no lado seguro: stunnel.org/examples/mysql.html
danlefree
De qualquer modo, use um encapsulamento, mas encapsular apenas a porta mysql e usar condições não persistentes terá um efeito adverso no desempenho - atenuar a porta com conexões persistentes ou usar VPN (por exemplo, ppp sobre stunnel) com persistência
symcbean 14/01
skip-name-resolvefez o truque. Muito Obrigado!
ceejayoz