Felipe Meirelles.com

Desenvolvedor WEB, DRUPAL, WORDPRESS, PHP – RJ

30AGO•2011

Tabela locales_source aumentando de tamanho no Drupal 6

Postado por Felipe - Sem Comentários

Olá pessoal, esta semana precisei resolver um problema com um cliente que possuía um site desenvolvido em Drupal 6 que estava ficando lento demais para abrir as páginas.

Ao verificar o banco de dados, percebi que a tabela ‘locales_source ‘ estava ocupando 640Mb e a cada vez que eu atualizasse alguma página esse tamanho aumentava ainda mais, até atingir os 680Mb em menos de 2 horas.

Após quebrar a cabeça durante alguns dias, descobrí que o problema ocorria devido a um bug no módulo ‘locale‘ , que forçava o Drupal a gravar sempre uma nova tradução no banco, mesmo que a tradução já existisse lá. Isto acontecia porque ao consultar o banco para saber se a tradução já existia, o Drupal estava comparando pedaços de código html junto com as strings, tornando as strings sempre diferentes das que haviam no banco.
O site acabou virando um imenso buraco-negro digital rsrs.

Para solucionar este problema eu comentei a linha 392 do arquivo locale.module que faz a inserção das novas strings de tradução no banco.

// We don't have the source string, cache this as untranslated.

// A linha abaixo foi comentada para não gerar cache das traduções do drupal na tabela locales_source

//db_query(“INSERT INTO {locales_source} (location, source, textgroup, version) VALUES (‘%s’, ‘%s’, ‘default’, ‘%s’)”, request_uri(), $string, VERSION);

$locale_t[$langcode][$string] = TRUE;

// Clear locale cache so this string can be added in a later request.

cache_clear_all(‘locale:’, ‘cache’, TRUE);

Feito isto, eu já tinha a garantia de que nenhuma nova string será adicionada na tabela.

Em seguida eu abrí a tabela locales_source pelo phpMyAdmin e pedi para me listar todos os registros que continham alguma tag html, através do comparador ‘like’ , passando como string de comparação o final de uma tag html ‘%/>%’. Foram retornados cerca de 70 mil registros.
Rodei mais uma consulta só que desta vez excluindo estes mesmos registros do banco, que ficou agora com apenas 8 mil registros que eram realmente as strings traduzidas pelo Drupal.

No meu caso, mesmo após este processo, a tabela ainda estava mostrando o tamanho errado, mas foi facilmente corrigido pela opção ‘otimizar‘ do próprio phpMyAdmin, que deixou agora a tabela com menos de 3Mb.

Vale lembrar que no meu caso eu já havia importado as traduções logo que instalei o Drupal, então ao apagar o ‘lixo’ que o módulo gerou, não perdí o que já estava traduzido. Por garantia, avalie antes quais idiomas o site terá e já crie as traduções, pois neste caso, ao travar o insert de traduções no banco, os idiomas não sofrerão praticamente nenhum impacto.

Bom, espero ter salvo a vida de alguém por hoje, pois pra mim isso me valeu um cliente feliz rsrs

Abraço à todos

Pesquise um assunto

Quem sou Eu??

minha foto de avatar

About Felipe

Programador desde os 8 anos, autodidata desde os 5. Baterista amante do rock (e seus derivados), internet, tecnologia, Coca-Cola e chocolate amargo(só lembrei desses aí).Sou formado em Tecnologia da Informação, pós-graduado em Engenharia de Software e trabalho com desenvolvimento de sistemas a 10 anos para desktop e web

Conheça um pouco mais sobre mim