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

4

Estamos tentando expandir nossas instalações do Drupal e decidimos algumas caixas dedicadas do MySQL. Infelizmente, estamos com uma lentidão extrema quando tentamos usar os tempos de carregamento da página de DB remotos de ~ 200 milissegundos para 5-10 segundos.

A latência entre os servidores é mínima - um décimo ou dois de um 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.module timers do Drupal mostram que as consultas ao banco de dados não estão sendo executadas mais lentamente no banco de dados remoto - cerca de 150 microssegundos, seja ele local ou remoto. A criação de perfil com o XHProf também mostra tempos de execução do PHP que 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 se uma página tem 12 consultas ou 250.

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

    
por ceejayoz 13.01.2011 / 21:47

2 respostas

5

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

Meu principal suspeito seria falhar (= tempo limite) pesquisas de DNS no servidor remoto ou local; pesquisa direta e inversa.

De esta página : inicie 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. (no topo da minha cabeça: pesquisas de DNS locais, problemas de firewall (caixa NAT sobrecarregada em algum lugar?), perda de pacotes no link em algum lugar, ..)

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

    
por 14.01.2011 / 06:49
3

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

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

    
por 14.01.2011 / 09:29