Introdução

O objetivo de otimizar qualquer recurso é a economia. E ela pode ser economia de espaço em disco, ou economia de tráfego de rede, de uso de memória, de banco de dados… No final, a otimização permite que os recursos sejam melhor utilizados. Um site otimizado será transferido e aberto mais rapidamente. Em tempos atuais, onde tudo flui na velocidade da luz, desempenho é fundamental, não só para o seu negócio, mas também para o seu site.

Uma grande parte dos sites do mundo são administrados por um sistema gerenciador de conteúdo (CMS), e entre eles, destaca-se o WordPress. O mesmo se baseia fortemente no uso de um sistema gerenciador de banco de dados (SGBD), o MySQL. Veremos então como podemos otimizar o banco de dados para que o WordPress faça uso dele mais rapidamente, e com isso tenhamos um ganho de desempenho.

O WordPress

O WordPress é seguramente o Sistema Gerenciador de Conteúdos (CMS) mais usado do mundo. Ele é um software livre e foi escrito na linguagem de programação PHP. Entre as suas inúmeras características destaca-se uma sólida arquitetura de plug-ins (extensões), que permitem a expansão das suas capacidades; uma grande abundância de temas e templates, que torna possível alterar completamente o visual do site; suporte a dispositivos móveis, cada vez mais comuns hoje em dia… Entre outras vantagens.

O WordPress, como já falamos anteriormente, é um CMS que se baseia em um Sistema Gerenciador de Bancos de Dados (SGBD), o MySQL. Ouso do MySQL é fundamental para o sucesso que é o WordPress. Veremos então um pouco sobre ele.

O MySQL

O MySQL é um Sistema Gerenciador de Bancos de Dados (SGBD), que usa a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface. Os criadores são David Axmark, Allan Larsson e Michael “Monty” Widenius. O MySQL é um software livre, com uma dupla licença, livre e comercial: A versão livre recebe as atualizações um ano após a versão comercial.

A empresa MySQL AB, desenvolvedora do SGBD, foi adquirida em 2008 pela Sun Microsystems. No ano seguinte, a Sun foi adquirida pela Oracle, que desde então é a nova proprietária do MySQL. Hoje existe uma variante do MySQL, o MariaDB. Este é um SGBD desenvolvido pelo próprio Monty Widenius, que pediu demissão quando a Sun foi adquirida pela Oracle, e passou a desenvolver essa ramificação. Em essência, tudo que funciona em um, funciona no outro.

O MySQL é certamente um dos SGBDs mais populares do mundo, com mais de 10 milhões de instalações. Podemos citar algumas empresas que o usam, como a NASA, o Banco Bradesco, a Dataprev, a HP, a Nokia, a Sony, a Lufthansa, o Exército Americano, a Associated Press, a Alcatel, o Google, a Cisco, entre muitas outras empresas. Ele é amplamente usado para ensino de bancos de dados, linguagem SQL e tem uma integração muito fácil com o PHP. Logo, ele torna-se a opção natural para quaisquer CMS que façam uso de PHP. A sigla LAMP (Linux, Apache, MySQL e PHP) é muito conhecida por simbolizar a aliança do melhor sistema operacional de código aberto, com o mais usado de todos os servidores Web, o banco de dados campeão e a linguagem de programação amplamente adotada.

A Hostnet usa o MySQL e sua contraparte livre, o MariaDB, em seus servidores de bancos de dados, aliando robustez à facilidade de uso, segurança e qualidade.

A importância da otimização

Ninguém gosta de perder tempo. E hoje em dia não basta ter conteúdo oferecido a custo baixo. Tem que ter também uma resposta rápida. É irritante aguardar muitos segundos ou até alguns minutos para acessar certos sites lentos, ou ainda ter que escavar entre páginas de texto inútil para encontrar conteúdo útil. Fatalmente esse site será abandonado pelos seus usuários.

E hoje temos a grande parte da navegação Web ocorrendo em dispositivos como smartphones. Otimizar o site significa também torná-lo mais acessível para usuários que acessem a partir de dispositivos móveis, onde a largura de banda é mais limitada e a quantidade de dados que pode trafegar, bem menor, devido ao plano de dados da operadora. Focar também nesses clientes é uma estratégia altamente recomendada.

Microssegundos economizados fazem diferença no tráfego do site: Quando mais rápido, maior será o tráfego.

Mãos à obra!

Nosso objetivo, nesse material, é apresentar um breve guia de como otimizar o seu banco de dados, para que ele responda às solicitações mais rapidamente e assim acelere todo o conjunto.

Se você atualiza seu site regularmente, o banco de dados irá crescer de tamanho, e bancos de dados grandes e pesados afetam diretamente o desempenho de qualquer site: O SGBD demora mais para responder, o CMS leva mais tempo para gerar a página, e por aí vai. A remoção de dados desnecessários aumentará a eficiência do banco de dados, e suas páginas irão ser lidas mais rapidamente. Veremos então como.

Entendendo o banco de dados usado pelo WordPress

Antes de otimizar o banco de dados, é preciso entender como o WordPress estrutura o banco de dados que usa. O WordPress trabalha, a princípio, com 11 tabelas (claro, isto pode mudar no futuro). Os plug-ins criam tabelas novas, então é comum encontrarmos sites gerenciados pelo WordPress que contenham dúzias de tabelas. Nessas tabelas extras, teremos configurações salvas dos plug-ins, dados usados por eles, entre outras.

As onze tabelas básicas são:

  • wp_commentmeta – Guarda meta informações a respeito dos comentários.
  • wp_comments – Armazena os comentários.
  • wp_links – Salva links que são recomendados pelo site. Logo, se você criar essa seção, estará salva nessa tabela.
  • wp_options – Guarda as configurações administrativas.
  • wp_postmeta – Armazena meta informações a respeito dos posts.
  • wp_posts – Salva dados dos posts, páginas e outros tipos de conteúdo.
  • wp_terms – Guarda etiquetas e categorias dos posts e links.
  • wp_term_relationships – Armazena a relação entre os posts, as categorias e as etiquetas, além da relação entre links e categorias de links.
  • wp_term_taxonomy – Salva a descrição a respeito da taxonomia usada na tabela wp_terms. Nesse caso, a taxonomia é a categoria, o post ou a etiqueta usadas.
  • wp_usermeta – Guarda meta informações a respeito dos usuários.
  • wp_users – Armazena os dados dos usuários.

Consertando e otimizando o banco de dados do WordPress

A ferramenta ideal para realizar operações como reparo e otimização é o phpMyAdmin. A Hostnet tem servidores de bancos de dados, e em todos, há esta ferramenta disponível. Outra opção é usar um plug-in do WordPress, chamado Adminer, mas é uma maneira desaconselhada por questões de segurança.

Usando o phpMyAdmin

Você pode acessar o servidor de banco de dados vinculado à sua conta. Para tal, será necessário a URL para acessar o phpMyAdmin. O endereço é no formato http://amysql.<seu site>. Portanto, se o seu domínio é www.comocriarmeusite.com.br, o domínio do phpMyAdmin é http://amysql.comocriarmeusite.com.br. O nome de usuário (login) é aquele usado para a criação do banco de dados. Caso você não saiba, você pode acessar o Painel de Controle da Hostnet, e seguir os seguintes passos: Clique em Banco de Dados, e depois clique em Banco MySQL.

Você terá uma tabela com o nome do banco, o usuário vinculado a esse banco, a URL e o servidor de banco de dados vinculado. Se você selecionar o Banco de Dados, existirão outras opções. Para trocar a senha, clique no botão Senha para redefini-la.

Ao acessar o phpMyAdmin, você terá um banco de dados, com o nome do seu usuário. Ao clicar nele, você verá as tabelas do banco de dados, mas nos ateremos às duas últimas colunas: tamanho e sobrecarga.

O tamanho depende da quantidade de dados que são armazenados nesta tabela: Quanto mais linhas, maior o tamanho da tabela. A sobrecarga denota o espaço em disco, em caráter temporário, que é usado pelo seu banco de dados para armazenar queries SQL. Conforme o tempo passa, a sobrecarga de uma tabela poderá aumentar. É perfeitamente normal ter sobrecarga no banco de dados usado pelo WordPress, e não afetará realmente a performance, a não ser que ela esteja muito alta.

Logo, otimizar o banco de dados significa remover a sobrecarga e reduzir o tamanho em geral do banco de dados. Alguns relacionam a otimização de um banco de dados à desfragmentação de um disco rígido: necessário fazer de tempos em tempos, para melhorar o desempenho. A otimização do banco de dados consiste em eliminar linhas já apagadas, sequenciar novamente as linhas, comprimir, gerenciar os índices, desfragmentar as linhas da tabela… Tudo isto é otimização, e o próprio MySQL é quem fará esse processo.

Otimizando as tabelas

Para realizar esse processo de otimização, é possível executar um comando SQL para que seja feito, ou então você pode acessar o phpMyAdmin e fazê-lo.

Se você preferir escrever, o comando é o OPTIMIZE TABLE. Você deverá usar a seguinte sintaxe:

OPTIMIZE TABLE ‘nome da tabela’;

Se você quiser otimizar a tabela wp_posts, você poderá fazê-la com o seguinte comando:

OPTIMIZE TABLE ‘wp_posts’;

Mas também é possível otimizar as tabelas a partir do menu principal do próprio phpMyAdmin. Para fazê-lo, marque as tabelas que você deseja otimizar (ou clique em Marcar todos para assim selecionar todas as tabelas) e no menu ao lado, escolha a opção Otimizar tabela. Feito isto, o phpMyAdmin vai otimizar todas as tabelas. Em alguns casos, você verá uma mensagem como essa:

Table does not support optimize, doing recreate +…

Isto significa que o MySQL não conseguiu otimizar a tabela. Logo, ele a recriou, realizando a otimização da mesma no processo de recriação.

Em alguns casos, a tabela precisa antes ser reparada. Caso uma tabela tenha sido corrompida, o processo de reparação irá consertá-la.

Seria possível automatizar esse processo?

Sim, é possível. O WordPress tem uma ferramenta que permite que você repare e otimize o seu banco de dados, a partir da instalação do WordPress. Para tal, é necessário primeiro que você adicione a seguinte linha no arquivo wp-config.php, na instalação do WordPress:

define(

Feito isto, a ferramenta de otimização passa a estar acessível a partir de http://<seu site>/wp-admin/maint/repair.php. Ou seja, se o seu site é www.comocriarmeusite.com.br, a ferramenta de otimização estará disponível em http://www.comocriarmeusite.com.br/wp-admin/maint/repair.php.

A partir da interface disponibilizada pelo WordPress, é possível automatizar o processo de reparo e otimização do banco de dados, inclusive dispensando a necessidade de estar logado no WordPress. Se formos olhar pelo lado da segurança, isto é uma falha. Mas como apenas a ferramenta pode realizar essas tarefas, não chega a ser um grande problema. Claro, é fundamental manter os olhos abertos em situações como esta.

Retirando o inchaço do banco de dados do WordPress

Normalmente, os bancos de dados do WordPress acumulam muitas informações desnecessárias, o que impacta diretamente na velocidade e na eficiência. Existem diversas coisas que aumentam esse inchaço, mas com algumas boas práticas, será possível reduzir ou até eliminá-lo completamente do seu site. Vamos ver então quais são os tipos de dados que podem ser removidos.

Revisões

O sistema de revisões do WordPress armazena todos os rascunhos e versões dos posts publicados. Isto facilita para quando for preciso reverter para uma versão mais antiga, por exemplo. Mas isto acaba fazendo com que o banco de dados se torne desnecessariamente grande. O próprio WordPress não limita o número de revisões e atualizações para cada post.

Mas é possível reduzir a quantidade de revisões do material que é guardado pelo banco de dados. Para isto, acesse o arquivo wp-config.php e acrescente a seguinte linha:

define(

Assim, teremos duas revisões salvas, apenas. Caso você deseje desabilitar o sistema de revisões (o que é altamente desaconselhado), coloque a seguinte linha no arquivo wp-config.php:

define(

Vale lembrar que o número máximo de revisões valerá para os posts novos, a partir da alteração do arquivo wp-config.php. Posts mais antigos não perderão as revisões anteriores, por exemplo. Mas existem plug-ins do WordPress que podem fazer essa remoção. Por exemplo, o plug-in Optimize Database after Deleting Revisions pode fazer esse trabalho. Inclusive, é possível agendar para que ele realize essa tarefa de tempos em tempos, como por exemplo, semanalmente.

Outro plug-in que pode realizar essa tarefa é o Better Delete Revision. Nesse caso, você pode listar todas as revisões feitas, mas não pode selecionar e remover algumas. O plug-in permite apenas que você remova todas as revisões.

Salvamento automático

O WordPress salva o documento que está sendo editado a cada 60 segundos. Caso haja necessidade, esse intervalo pode ser mudado, alterando uma linha no wp-config.php para aumentar ou diminuir esse intervalo. A linha é esta:

define(

De acordo com o exemplo acima, o WordPress passará a salvar automaticamente a cada 180 segundos (3 minutos). Se você ainda assim quiser desativar, basta substituir o valor por false. Não é recomendado que isto seja feito, pois esse salvamento automático torna-se uma proteção contra a possível perda de um documento por alguma falha externa (como queda de energia, etc).

Comentários categorizados como Spam

O spam é uma praga que transbordou dos e-mails até os comentários de grandes portais de Internet. Normalmente, o WordPress apaga comentários marcados como spam em 30 dias. Mas dependendo do volume de mensagens (e de comentários), em breve você poderá ter centenas ou até milhares de linhas ocupadas na tabela de comentários do banco de dados do WordPress.

A solução mais adotada de todas consiste no uso do plug-in Akismet. Este plug-in, além de filtrar o spam recebido nos comentários de um site, pode ser configurado para apagar imediatamente todo comentário marcado como spam, o que diminui o impacto no seu banco de dados.

Hoje em dia, o próprio WordPress adicionou um botão, intitulado Esvaziar Lista de Spam. Este botão está disponível em Comentários → Spam. Assim, é possível deletar todo o spam instantaneamente.

Outra maneira de diminuir a ocorrência de spam é bloqueando os posts mais antigos para comentários. Normalmente eles procuram posts que são bem indexados em sites de busca, mas que sejam postagens antigas. Para minimizar isto, você pode desabilitar os comentários para posts que são mais antigos do que um determinado número de dias. Isto é possível ser feito em Configurações → Discussão → Outras Configurações de comentários.

Se você quiser remover o spam diretamente no banco de dados, use este comando SQL, no phpMyAdmin:

DELETE FROM wp_comments WHERE comment_approved = ‘spam’

Assim, todos os comentários marcados como spam que estão na tabela wp_comments serão apagados.

Se você quiser apagar os comentários que aguardam aprovação, você pode realizar esta operação com o seguinte comando SQL:

DELETE FROM wp_comments WHERE comment_approved = ‘0’

Itens apagados

Quando você apaga um elemento no WordPress (post no blog, imagem, página, comentário ou link), ela é enviada para a lixeira. A lixeira funciona como mais um sistema a provas de falha do WordPress, que previne apagamentos por acidente. Caso seja necessário, o elemento está lá na lixeira, é só restaurar.

A não ser que você remova vários itens de forma regular, não há necessidade de se preocupar com o espaço ocupado pela lixeira no seu banco de dados. Mas, se você tiver que remover uma grande quantidade de elementos numa instalação do WordPress, é bom lembrar que os itens apagados ficam na lixeira até que ela seja esvaziada, ou em até 30 dias.

O número de dias pode ser alterado adicionando esta linha no seu arquivo wp-config.php.

define(

Desta maneira como está configurada, a lixeira guardará todos os arquivos que tem até 5 dias por lá. Quando ultrapassar esse limite, a lixeira irá descartar automaticamente. Agora, caso você deseje desabilitar completamente a lixeira, troque o valor para 0.

De qualquer forma, não desabilite a lixeira: Se você apagar algo por engano, não será possível restaurar.

Transientes do WordPress

Os transientes do WordPress é um recurso muito usado por desenvolvedores. A ideia é guardar dados de forma temporária no banco de dados do WordPress. Esses registros transientes são salvos na tabela de opções do WordPress, a wp_options.

Quando esses registros expiram, eles continuam guardados no banco de dados, e isto tornará seu site mais lento. Existem alguns plug-ins que podem ajudar a remover esses transientes que não são mais necessários.

O Transient Cleaner é um desses plug-ins do WordPress. Este, em particular, tem uma opção para remover transientes expirados, assim como remover todos os transientes. Tem outro plug-in, o Delete Expired Transients, que permite inclusive agendar a remoção destes transientes expirados de forma diária.

Ainda há um terceiro plug-in, o Transients Manager. Este permite que você visualize, edite e apague transientes do WordPress. Mas ele não permite apagar todos os transientes expirados numa tacada só. Logo, você terá que trabalhar com ele (caso queira) com algum outro plug-in (como um dos plug-ins citados acima).

Finalmente, transientes não são algo que você deve se preocupar sempre, mas é bom checá-los de tempos em tempos, para ver se não está afetando o desempenho.

Tabelas criadas por plug-ins ou temas que não são usados

Quase todos (senão todos) os plug-ins do WordPress armazenam informações no banco de dados usado pelo WordPress. Infelizmente, quando um plug-in é desinstalado, as informações a respeito daquele plug-in não são removidas do banco.

E acredite, isto não é exatamente um erro. Se os dados são removidos a cada vez que você desativa um plug-in, será necessário você reconfigurar tudo quando ele for reativado, e informações a respeito do plug-in serão perdidas.

Claro que, se você estiver apenas testando um plug-in, ou tiver decidido que não quer mais usar o mesmo, é interessante remover todas as informações a respeito desse plug-in da tabela do banco de dados do WordPress. Existem alguns plug-ins que fazem esse trabalho, de remover todas as suas entradas no banco de dados, e dão esta opção para o usuário.

Mas como a maioria dos plug-in não remove os dados, é fácil imaginar que lixo desnecessário irá se acumular dentro do banco de dados do WordPress. Devido a isto, é razoavelmente comum encontrar dezenas de tabelas criadas pro plug-ins que já foram removidos faz tempo.

Os temas do WordPress também salvam informações no banco de dados e continuam lá mesmo quando o tema é trocado ou desinstalado.

As tabelas não usadas podem ser removidas com o uso do phpMyAdmin. Só que este é um trabalho penoso e preocupante: Se você for remover “na mão”, pode acontecer de uma tabela que não deveria ser apagada sofrendo remoção. Existe um plug-in no WordPress, chamado WPDBSpringClean. Este plug-in identifica tabelas que estão sem atualização há tempos, e te dá a opção de apagá-las, uma a uma. Assim, apesar do trabalho de ficar identificando uma a uma, o plug-in te dá mais um pouco de trabalho mas faz uma limpeza mais acertada.

Plug-ins que acrescentam lixo ao banco

Além dos plug-ins desinstalados que ainda acumulam lixo dentro do banco de dados, existem plug-ins que guardam informações necessárias ao seu funcionamento. E todas essas informações estão salvar no banco de dados do WordPress. E quase todos colocam informações no banco, aumentando o seu tamanho.

A princípio, é preciso pesar se vale mesmo a pena instalar aquele plug-in novo no seu WordPress, pois eles não só consomem recursos no banco de dados, mas também memória e processamento do servidor.

Alguns tipos de plug-ins usam muito espaço no banco de dados. São eles:

  • Plug-ins que aplicam rotinas anti-spam: Esta categoria de plug-in guarda muitas informações no banco de dados (normalmente na tabela wp_commentmeta) com o objetivo identificar os spammers. Logo, endereços IP e de e-mail são salvos.
  • Plug-ins relacionados à segurança: Assim como a categoria anterior, os plug-ins que trabalham com segurança guardam informações de possíveis atacantes, para já bloquear o acesso deles ao site.
  • Plug-ins que geram estatísticas: Este tipo de plug-in guarda muitas informações a respeito de tráfego, para gerar seus relatórios. Então, guardam informações como dados dos visitantes, quantidade de visitas, países, navegadores, sistemas operacionais, palavras-chave, e mais um tanto de informações que poderão ser cruzadas para a geração dos respectivos relatórios.
  • Plug-ins que geram listas de posts relacionados e de posts mais populares: Este tipo de plug-in armazena muitos dados e usam muitos recursos do processador do servidor. Com esses dados (número de likes, compartilhamentos, visualizações da página, etc) eles podem cruzar os dados e sugerir posts novos para os usuários do site.
  • Plug-ins que rastreiam links: A maioria das soluções tem a opção de rastrear o número de cliques nos links disponíveis. Isto é muito útil para entender os hábitos de um usuário de um site e ver para onde o tráfego está indo. Infelizmente, guardar essa informação ocupa espaço (e muito) no nosso banco de dados.

Alguns desenvolvedores tem consciência disso, e incluem uma opção para que os usuários, de vez em quando, possam apagar dados armazenados. Mas nem todos o fazem. Outros colocam a opção de você escolher sobre como o plug-in trabalhará, em termos de coleta de dados: Se vai coletar mais ou menos, e com isto, se terá impacto na performance ou não. Alguns também colocam a opção de apagar estatísticas mais antigas, como as que passarem de 30 dias de idade, por exemplo. Mas infelizmente, nem todos os plug-ins tomam esse tipo de cuidado.

Mas existe um plug-in para o WordPress no qual podemos verificar qual deles está impactando na velocidade do site. Este plug-in é o P3 (Plugin Performance Profiler). Um dos seus recursos é mostrar o impacto que cada plug-in tem no carregamento da página do seu site.

Se um plug-in está consumindo muitos recursos no seu banco de dados, ou abaixando a velocidade do seu site de forma considerável, remova-o. Só mantenha um plug-in que traga tanto impacto no desempenho do seu site se ele é fundamental para o sucesso do site. Do contrário, substitua-o. Procure um outro que realize a mesma tarefa sem gerar tanto consumo de recursos, é bem provável que exista.

Otimizando o banco usando um plug-in do WordPress

Ao longo desse texto temos muitas informações sobre como otimizar o banco de dados do WordPress, usando o software phpMyAdmin e o arquivo wp-config.php. Mas pode ser que você prefira uma solução mais cômoda, como um plug-in do WordPress para fazer todo o processo. Podemos te sugerir então alguns:

  1. O WPClean Up é um desses, muito bom para remover dados desnecessários. Ele permite remover revisões desnecessárias, rascunhos, transientes excluídos, comentários descartados… Tudo isso de forma fácil.
  2. O WP-Optimize pode fazer isso tudo que o WPClean Up também faz. Ele acrescenta uma página onde você pode consultar, para cada tabela do WordPress, o tamanho dos dados, do índice e a sobrecarga.
  3. O WP-DBManager permite que você repare e otimize seu banco de dados, além de poder configurar o backup automático do banco de dados do WordPress. Conforme falamos anteriormente, tome cuidado com plug-ins que mexem diretamente no banco de dados, removendo tabelas e fazendo queries SQL, pois isto pode ser uma falha de segurança: Alguém que entrar no seu site a partir desse cliente plug-in pode promover um grande estrago no banco de dados. Mantenha o backup atualizado.

Conclusão

Em tempos onde todo mundo tem pressa, otimizar o banco de dados do WordPress é algo fundamental para garantir um bom desempenho do seu site. E é um processo simples, que toma pouco tempo, na verdade. Vamos a algumas configurações que você pode fazer, se está com dúvida:

  • Reduza o número de revisões salvas para 2. Edite o wp-config.php e acrescente a linha define(‘WP_POST_REVISIONS’, 2);
  • Use regras anti-spam bem rígidas. Assim, o volume de spam adicionado ao banco de dados reduzirá;
  • Remova permanentemente todos os itens que foram apagados;
  • Verifique o banco de dados usando o phpMyAdmin. Otimize, repare as tabelas e apague as que estão sem uso;
  • Use de tempos em tempos um plug-in de otimização, como os que falamos acima. Use-os para remover transientes e outros tipos de dados que se acumularam com o tempo;
  • Reduza a permanência dos dados na lixeira do WordPress, de 30 para 5. Isto pode ser feito colocando a diretiva define(‘EMPTY_TRASH_DAYS’, 5); no wp-config.php;
  • Use um plug-in de cache no WordPress. Assim você reduzirá o número de requisições ao banco de dados. O banco em si terá o mesmo tamanho, mas o servidor MySQL será menos acessado, e assim suas páginas serão carregadas mais rapidamente.

Assim, será possível que você otimize seu banco de dados, e com isso ganhe desempenho no seu site.