WPML
Status
Resolvido
Resolvido em
2.3.8

Visão geral do problema

A partir da versão 2.3.0 do plugin WPML Media Translation, é possível traduzir e sincronizar mídias entre as traduções.

Como parte do processo de configuração (que também é executado quando você migra de uma versão anterior), o WPML Media analisa todo o site em busca de URLs de mídia usadas no conteúdo.

Sinalizar os posts que contêm mídia ajuda futuramente para que, em determinados eventos relacionados à tradução de mídia (como a tradução de um determinado post de mídia), apenas os posts que realmente incluem mídia sejam analisados para atualizar o conteúdo com a mídia traduzida.

No entanto, em sites muito grandes, o processo de configuração pode colocar alguma pressão no banco de dados, tornando todo o processo mais lento do que o esperado.

Em grande parte, a sobrecarga é causada por consultas necessárias para identificar os IDs de anexo com base nas URLs. Normalmente, o ID do anexo pode ser determinado a partir dos atributos de uma tag HTML (por exemplo, id=”attachment_8” – aqui, 8 é o ID do anexo). Quando esse atributo não é usado, o WPML Media determina o ID a partir da própria URL. Nesse caso, são usados dois tipos de consulta:

  • Uma consulta que busca uma correspondência no campo ‘guid’ na tabela wp_posts
  • Outra consulta que busca uma correspondência nos campos meta_value da tabela wp_postmeta.

Nenhum desses campos de tabela, no entanto, é indexado por padrão. Como se trata de uma correspondência de texto (mesmo que não seja uma pesquisa de texto parcial), em bancos de dados grandes, isso pode ser lento.

Solução alternativa

Uma maneira de contornar esse problema é adicionar (pelo menos temporariamente) índices para esses campos.
Você pode fazer isso usando duas consultas SQL como as seguintes:

ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`); ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));

Essas adições não devem ter nenhum efeito colateral em seu banco de dados, além de tornar o tamanho físico do banco de dados um pouco maior no disco. Se você preferir revertê-las após executar a configuração de Mídia do WPML, poderá fazer isso usando as duas seguintes consultas MySQL:

ALTER TABLE `wp_posts` DROP INDEX `guid`; ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;

Nota: o prefixo wp_ para as tabelas mencionadas nas consultas pode ser diferente de acordo com a configuração do seu WordPress. Geralmente e por padrão, é wp_

Exemplo de estudo de caso: em um site com cerca de 140.000 anexos e cerca de 5.000 posts, a configuração pode levar mais de 30 minutos para ser concluída. Após adicionar os índices, a configuração é executada em alguns minutos. Os testes foram feitos em um ambiente de desenvolvimento comum. Esses valores podem ser ainda mais favoráveis em um servidor de produção real.

Todos os problemas conhecidos →