Hoje vamos dar uma olhada na tabela wp_options em sua base de dados do WordPress. Isso é uma área que frequentemente consegue ignorar quando se fala em WordPress e desempenho da base de dados. Especialmente em sites mais antigos e maiores, isso pode ser o culpado pela lentidão em tempos de pesquisa em seu site, devido os dados autocarregados que foram deixados para trás de plugins e temas de terceiros. Verifique estas dicas abaixo em como verificar, diagnosticar, e limpar sua tabela wp_options.

O que é a tabela wp_options?

A tabela wp_options contém todos os tipos de dados para seu site WordPress como:

  • URL do site, home URL, e-mail do administrador, categoria padrão, artigos por página, formato de tempo, etc
  • Configurações para plugins, temas e widgets
  • Dados de cache temporários
Tabela wp_options
Tabela wp_options

A tabela contém os seguintes campos, um dos quais importamos quando se trata de desempenho:

  • option_id
  • option_name
  • option_value
  • autoload
tabela de carregamento automático do wp_opções
tabela de carregamento automático do wp_options

Uma das coisas importantes para entender sobre a tabela wp_options é o campo carregamento automático. Isso contém um valor sim ou um não (sinal). Isto essencialmente controla se é ou não carregado pelo wp_load_alloptions() function. Os dados autocarregados são as informações, carregadas em cada página do seu site WordPress. Assim como mostramos a vocês como desativar determinados scripts de carregamento do site, a mesma ideia se aplica aqui. O atributo carregamento automático está definido como “sim” por padrão para desenvolvedores, mas teoricamente nem todos os plugins devem carregar seus dados em cada página.

O problema que os sites WordPress podem executar quando há uma grande quantidade de dados carregados automaticamente na tabela wp_options. Isso é geralmente resultado do seguinte:

  • Os dados estão sendo carregado automaticamente por plugin quando esta opção deveria estar definida como “não”. Um bom exemplo disto seria um formulário de contato do plugin. Ele precisa carregar os dados em cada página ou apenas na página de contato?
  • Plugins ou temas foram removidos do site WordPress, mas suas opções são ainda deixadas para trás na tabela wp_options. Isto poderia significar dados carregados automaticamente de maneira desnecessária e que estão obtendo retorno em cada solicitação.
  • Os desenvolvedores dos plugins e temas estão carregando dados na tabela wp_options em vez de utilizar suas próprias tabelas. Existem argumentos para ambos os lados, pois alguns desenvolvedores preferem plugins que não criam tabelas adicionais. Porém, a tabela wp_options também não foi desenvolvida para suportar milhares de linhas.

Quanto pode ser considerado o excesso de dados carregados automaticamente? Isso pode variar, é claro, mas idealmente você quer que esteja entre 300 KB a 1MB. Uma vez que você começa a se aproximar de 3 a 5 MB, ou mais, existem coisas prováveis que podem ser otimizadas ou removidas para ser carregadas. E nada abaixo de 10 MB seria endereçada agora mesmo. Isso não significa sempre que causará um problema, mas é um bom lugar para começar.

Resolução de problemas de dados de carregamento automático na tabela wp_options

Se você está sentindo lentidão em seu site WordPress, pode ser devido a uma consulta ou carregamento automático de dados deixados através de um plugin antigo do WordPress. Abaixo mostraremos a você como verificar o tamanho de carregamento em seu banco de dados, bem como mergulhar em um site de dados vivos e compartilhar o que fizemos para limpar.

Verifique o tamanho dos dados carregados automaticamente

A primeira coisa a fazer é verificar o tamanho do carregamento automático atual em seu site WordPress. Para fazer isso, faça login no phpMyAdmin. Clique em seu banco de dados, à esquerda, e então, na tabela SQL. Em seguida, digite o seguinte comando e clique em “Ir”.

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';

Você pode ter que ajustar a pesquisa abaixo se seu site WordPress está usando um prefixo diferente do wp_.

tamanho da consulta do carregamento automático no phpMyAdmin
Tamanho da consulta do carregamento automático no phpMyAdmin

O autoload_size automático será exibido em bytes. Existem 1000 bytes em um KB e 1000 KBs em um MB. Então em seu caso, 249.025 bytes é igual a 0,25 MB e para este site, isso é um bom tamanho! Se você retornar tudo abaixo de 1 MB você não deverá ficar preocupado. Porém, se o resultado for muito maior, continue com este tutorial.

Tamanho do carregamento automático
Tamanho do carregamento automático

Abaixo está um site que estivemos testando no qual 137.724.715 bytes retornaram, ou melhor, 137 MB. Isso é um bom exemplo de um site onde algo está definitivamente errado, ou melhor, existem coisas para otimizar.

Grande carregamento automático de dados na tabela wp_options
Grande carregamento automático de dados na tabela wp_options

Você também poderia usar uma consulta maior como o seguinte. Isso mostrará a você o tamanho dos dados de carregamento, quantas entradas estão na tabela e as primeiras 10 entradas por tamanho.

SELECT 'autoloaded data in KiB' as name, ROUND(SUM(LENGTH(option_value))/ 1024) as value FROM wp_options WHERE autoload='yes'
UNION
SELECT 'autoloaded data count', count(*) FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 10)
Consulta avançada de carregamento automático de dados avançados do MySQL
Consulta avançada de carregamento automático de dados avançados do MySQL

Se você tem acesso ao New Relic (licença necessária), você poderia também usá-lo para ajudar na consulta da solução de problemas, conectado na tabela wp_options. O banco de dados da tabela salientará a tabela e tipo de consulta consumindo o maior tempo. Se você seleciona uma das entradas da lista, você pode ver mais detalhes, incluindo alguns exemplos de consulta. No exemplo abaixo, você pode ver que os dados apontam um dedo para o carregamento de dados na tabela wp_options. Sem dúvida, uma rápida análise do site em questão, confirmou que quase 250 MB de dados são carregados automaticamente.

Ao rever os detalhes da consulta lenta, você obtém uma noção do que precisa procurar no banco de dados.

Tipos Principais de Carregamento automático de Dados

Na próxima etapa seria ordenar os itens principais com dados de carregamento automático. Aqui está um comando SQL rápido que você pode usar no topo 10 da lista:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;

Novamente, você pode ter que ajustar uma pesquisa abaixo se seu site WordPress está usando um prefixo diferente de wp_.

Principais dados carregados automaticamente na tabela wp_options
Principais dados carregados automaticamente na tabela wp_options

Analisando os Dados Carregados Automaticamente em wp_options

A próxima etapa foi analisar alguns dos principais dados de carregamento automático.

301_redirects

Como podemos ver abaixo, a principal opção de carregamento automático é o redirecionamento 301. Isso está provavelmente diretamente relacionado com algum redirecionamento de plugin no site ou plugin WordPress SEO, a qual também uma função redireciona. Neste caso, a melhor recomendação é para também implementar os redirecionamentos ao nível de servidor.

Por quê? Porque usar plugins WordPress gratuito para implementar redirecionamentos pode às vezes causar problemas de desenvolvimento, pois a maioria deles utiliza a função wp_redirect, a qual requer códigos adicionais de execução e recursos. E claro, também dados de carregamento na tabela wp_options..

Se você é um cliente da Kinsta, pode facilmente adicionar redirecionamentos de nível de servidor usando a ferramenta de regras de redirecionamento no painel MyKinsta. Isso não apenas melhora o desempenho, mas você também terá um plugin a menos com o qual se preocupar!

Adicionando regras de redirecionamento no MyKinsta.
Adicionando regras de redirecionamento no MyKinsta.

wpurp_custom_template_

O próximo carregamento automático de opções de dados foi o wpurp_custom_template_#. Podemos ver que existem poucas linhas diferentes para ele. Tipicamente você deveria conseguir encontrar esta opção de nome e conectar os pontos, procurando em suas pastas de temas ou plugins. Neste caso, fizemos um comando grep do servidor para ver se poderíamos encontrá-lo. Você também poderia identificar a verificação via SFTP.

grep -Ri "wpurp_custom_template_"

O comando acima, contudo, nada retornou e então já falamos sobre o Google e fizemos uma pesquisa. Descobrimos rapidamente que foi relatado ao plugin do WordPress que não estava instalado no site, conhecido como WP Ultimate Recipe. Isso é um exemplo clássico de carregamento de dados desnecessário deixado pra trás. Temos um longo tutorial em como desinstalar os plugins WordPress (a maneira adequada). E apropriadamente, queremos dizer, na verdade, limpamos o que está por trás.

wpurp_custom_template_
wpurp_custom_template_

um_cache_userdata_

A próxima opção principal de dados carregados foi um_cache_userdata_#. Podemos ver que existem várias linhas diferentes para isto. Já que estamos em direção ao fim, rapidamente modificamos nosso comando MySQL para mostrar os 40 principais dados carregados automaticamente:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 40;

Ou somar todos os valores com esse prefixo:

SELECT 'sum size in KiB', ROUND(SUM(length(option_value))/1024,0) FROM wp_options WHERE autoload='yes' AND option_name like "um_cache_userdata_%"

Podemos ver que existiam muito mais entradas para um_cache_usedata_# na tabela wp_options. Executamos novamente um comando grep para verificar nossas pastas de plugins e temas.

grep -Ri "um_cache_userdata_"

Fomos capazes de identificar rapidamente isso como sendo relacionado para o plugin Ultimate Member. Outra pesquisa rápida do Google retornou com algumas poucas soluções para este problema (veja o artigo do suporte). Nunca subestime o poder de Pesquisa do Google! Descobrimos que existem algumas opções diferentes disponível no plugin para resolver este problema.

  • Ultimate Member > Painel > Cache do Usuário> Limpar Cache.
  • Últimate Member -> Configurações -> Avançado -> Parar cache de dados de perfil dos usuários (muda para ON), e então, salve as Mudanças.

Outra opção para ver o que é uma opção de carregamento automático é tocando no botão editar, e isso pode listar o diretório do plugin/tema ou a lista de desenvolvedores do site.

Cron Jobs

Outra opção frequente que vemos com uma grande quantidade de carregamento de dados é o cron. Para isso, poderia ser qualquer cron relacionado. Então, o que você pode fazer é clicar no botão “editar” para ver o que está causando isso. Aqui está um exemplo abaixo no qual foi aparentemente “do_pings” que causou o problema. Novamente, uma pesquisa rápida no Google revelou uma correção rápida para Clean up do_pings.

cron - do_pings
cron – do_pings

Limpar a Tabela wp_options

Se você está vendo muito do que mencionamos acima, então provavelmente é hora para uma limpeza de todos os dados de carregamento automáticos em sua tabela wp_options.  Também recomendamos que você tente manter o número de linhas em sua tabela wp_options para um mínimo possível. Por favor, sempre faça backups antes de apagar dados no banco de dados. Se você não está confortável fazendo você mesmo, recomendamos sempre contratar um desenvolvedor WordPress. Isso é também um bom cenário onde um ambiente de organização pode ser útil.

Como fizemos mais cedo, você vai precisar fazer login no phpMyAdmin. Clique em seu banco de dados do lado esquerdo e então na tabela SQL. Então introduza o seguinte comando e clique em “Ir”.

SELECT * FROM `wp_options` WHERE `autoload` = 'yes'

Você pode ter que ajustar a pesquisa abaixo se seu site WordPress está usando um prefixo diferente além do wp_. Isso mostrará a você todos os dados na tabela wp_options que estão definidos para carregar automaticamente.

Encontrar dados carregados automaticamente em wp_options
Encontrar dados carregados automaticamente em wp_options

Rolando para baixo através das linhas que vemos todos os tipos de plugins que não são mais instalados ou utilizados pelo site. Isso é apenas um exemplo que estamos usando, mas neste caso, notamos um monte de linhas Jetpack. O Jetpack não estava mais sendo usado no site em questão.

Carregamento de dados automáticos antigos
Carregamento de dados automáticos antigos

É sempre bom verificar a documentação de desenvolvedores de plugins, pois às vezes eles têm uma opção para limpá-lo, deixando as tabelas pra trás. Em cada caso, às vezes é mais seguro e fácil simplesmente instalar o plugin novamente, verificar suas opções de limpeza automatizada e então remover o plugin corretamente. Porém, mostraremos a você como limpar as tabelas manualmente.

Então neste caso, executamos uma seguinte consulta para encontrar os dados carregados automaticamente na tabela wp_options do plugin Jetpack. Para modificar a consulta com o seu próprio, simplesmente substitua o %jetpack%.

SELECT * 
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%jetpack%'

Você pode então selecionar todas as linhas e clicar em “Apagar.”

Apagando tabelas de carregamento automático
Apagando tabelas de carregamento automático

Ou você pode executar o seguinte comando:

DELETE
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%jetpack%'
Apagando os dados carregados automaticamente na tabela wp_options
Apagando os dados carregados automaticamente na tabela wp_options

Você pode então limpar e repetir por carregamento adicional de dados deixados para trás de plugins e temas em sua tabela wp_options.

Limpeza Transitória

A menos que você esteja usando um objeto cache, o WordPress armazena registros transitórios na tabela wp_options. Tipicamente estes são dados na expiração do tempo e deverá desaparecer ao longo do tempo. Porém, esse não é sempre o caso. Temos visto alguns bancos de dados, onde existem milhares de velhos registros transitórios. É também importante notar que os registros  transitórios não são para o carregamento por padrão. Você poderia usar uma consulta, como vemos abaixo, para ver se existem dados transitórios de carregamento automático.

SELECT * 
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%transient%'

Porém, uma opção melhor e segura seria utilizar um plugin grátis como Transient Cleaner, que pode limpar apenas os transitórios expirados de sua tabela wp_options.

Limpar as sessões de WordPress

Outra questão comum que temos visto é que às vezes os cron jobs ficam fora de sincronia ou não disparam corretamente e, portanto, as sessões não são limpas. Você pode acabar recebendo toneladas de fileiras de wp_session em seu banco de dados. Neste exemplo abaixo, o site em questão terminou com mais de 3 milhões de linhas em sua tabela wp_options. E a tabela tinha crescido para mais de 600 MB de tamanho.

tabela wp_options com milhões de linhas
tabela wp_options com milhões de linhas

Você poderia usar uma consulta como a abaixo para ver se você está se deparando com este problema:

SELECT * 
FROM `wp_options` 
WHERE `option_name` LIKE '_wp_session_%'
_wp_session_ linhas
_wp_session_ linhas

Na maioria dos casos, você pode então excluí-los com segurança (como um cron job deve ter) com o seguinte comando:

DELETE FROM `wp_options` 
WHERE `option_name` LIKE '_wp_session_%'

Depois de limpar todas as linhas restantes do wp_session, a tabela tinha menos de 1.000 linhas e foi reduzida para 11 MB de tamanho.

Limpeza do WP sessions
Limpeza do WP sessions

Também corrigiu os picos que o site estava entrando no MySQL.

Transações web MySQL
Transações web MySQL

Adicionar um índice ao carregamento automático

Se limpar sua tabela wp_options não foi suficiente, você poderia tentar adicionar um “Índice” ao campo de carregamento automático. Isso essencialmente pode ajudá-lo a ser pesquisado com mais eficiencia. A equipe incrível de 10up desenvolveu alguns cenários de teste em uma tabela wp_options com um número típico de carregamento de registros para mostrar como adicionar um carregamento automático de índice para a consulta wp_options pode impulsionar o desempenho.

tempo de consulta wp_options
tempo de consulta wp_options (Img src: 10up)

Também recomendamos verificar esses dois recursos adicionais da WP Bullet:

Para obter ainda mais dicas de otimização, confira nosso guia detalhado: Como acelerar seu site do WordPress (Guia Final)