wordpress

Pra quem trabalha com WordPress sabe como é chato ter de ficar migrando o banco de dados (se feito manualmente) pois há URLs e Paths a serem substituídos e, quando substituídos manualmente geralmente causam erro de permissões no painel administrativo.

Recentemente começamos utilizar um plugin para realizar tal migração. O plugin é o wp-migrate-db. Este plugin é muito simples de ser utilizado e gera dumps completos do banco de dados.

Basicamente o funcionamento do plugin de exportação é:

  • Ler todas as tabelas do banco do seu wordpress
  • Ler todas as colunas de cada uma das tabelas localizadas
  • Obter todos os registros de cada tabela e cada campo localizados
  • Realizar um filtro para evitar quebras para geração do dump
  • Gravar cada um dos registros localizados em um arquivo .sql
  • Disponibilizar o dump em .sql para download

Perfeito, tudo que eu precisava para realizar minha exportação! Mas algo precisava ser melhorado, e foi. Visto o formato do arquivo final, o tempo para realizar a importação no outro lado da migração era muito elevado, o processamento também. Tudo isso porque o plugin realizava o dump como sendo cada um dos registros um insert no banco de dados. Obviamente que se falarmos de um site de pequeno porte dificilmente você sofrerá com performance neste ponto. Mas ao falarmos de um e-commerce onde temos N variações e atributos o dump tende a tornar-se gigantesco que muito, mas muito lento mesmo de ser utilizado para importação. A imagem abaixo exibe um trecho do arquivo gerado pelo plugin original.

exportação completa antes da alteração

 

 

A solução – redefinindo a exportação

Como boa prática de SQL, defini que cada consulta pode ter até 500 inserts. Isso faz com que o dump diminua de tamanho e a execução se torne muito mais rápida. A imagem abaixo exibe o resultado após a alteração no plugin.

exportação completa após alteração

 

Como dá pra perceber, existem muito menos consultas ao banco de dados. Agora veremos alguns números:

Item Original Alterado
Tamanho do arquivo 7MB 4MB
Quantidade de registros * + 42.000 + 42.000
Consultas realizadas * + 42.000 167
Tempo médio de importação 25 min 2 min

* Somente para dump, deixando de lado as estruturas de tabelas

Para download, sugestão ou contribuição, basta utilizar o github 

Atenção!

Por realizar consultas mais pesadas podem ocorrer erros do tipo “Server has gone away”, caso isto ocorra e você não tenha como aumentar o tamanho de insert no seu banco de dados utilize o plugin original. Esta modificação se dá tranquilamente onde você tem o domínio sobre o banco e possa aumentar tempos de execução e tamanhos dos inserts.

 

Update

A versão atual do plugin já melhorou muito e resolveu o problema de muitos inserts. Atualmente os inserts são realizados agrupados como demosntrei neste post.

 

Você pode gostar também de Por que não gosto do WordPress

 


Andre Cardoso

Pai do Gab e da Mel, desenvolvedor PHP, co-autor do livro TDD com PHP (www.tddcomphp.com.br) e palestrante. Apaixonado por código de qualidade e resultados fantásticos.