Como posso excluir chaves órfãs nas tabelas de banco de dados do WordPress?

10

Em particular na tabela wp_options. Depois de quase 2 anos de produção de blog, parece ter aumentado muito, e eu não sei quantas porcarias existem lá.

Você conhece um plugin que funciona com o WordPress 3.0 ou uma consulta segura para executar na pesquisa de chaves / linhas órfãs?

Drake
fonte

Respostas:

7

Não há nenhuma consulta que tenha 100% de certeza de excluir tudo que não foi usado e não excluir essas coisas porque qualquer tema ou plug-in pode adicionar opções à wp_optionstabela. Ainda assim, com um pouco de esforço, você pode ter uma boa idéia do que não está em uso e depois decidir manualmente quais dessas coisas excluir e quais não.

Você pode inserir temporariamente o seguinte código no functions.phparquivo do seu tema e, em seguida, visitar todas as (tipo de) páginas do site público e, mais importante, todas as páginas de administração no console de administração. Depois de fazer isso, você pode abrir sua wp_optionstabela e olhar para o campo use_count(adicionado pelo código abaixo) para ver quais opções têm um valor use_countigual a zero (a contagem de uso não tem sentido, a menos que algo maior que 1 tenha sido lido ou atualizado pelo menos uma vez desde que você adicionou este código.)

global $wpdb;
header('Content-Type:text/plain');
$results = $wpdb->get_results("SHOW COLUMNS FROM wp_options WHERE Field='use_count'");
if (count($results)==0) {
    $wpdb->query("ALTER TABLE {$wpdb->options} ADD COLUMN use_count int UNSIGNED NOT NULL DEFAULT '0' AFTER autoload");
}

add_action('all','monitor_get_option_usage');
function monitor_get_option_usage($filter){
    if (preg_match('#^option_(.*)$#',$filter)) {
        increment_option_use_count(substr($filter,7));
    }
}
add_action('updated_option','monitor_update_option_usage');
function monitor_update_option_usage($option){
    increment_option_use_count($option);
}
function increment_option_use_count($option) {
    global $wpdb;
    $wpdb->query("UPDATE {$wpdb->options} SET use_count = use_count + 1 WHERE option_name = '$option'");
}

Com isso, você provavelmente poderá identificar opções que estão associadas a plugins antigos, temas anteriores e até opções próprias que você adicionou cedo, mas não usa mais. Exporte todos eles para um backup (apenas no caso) e exclua os que você deseja excluir. Quando terminar, você pode remover o use_countcampo (se quiser, não faz mal estar lá) e também remover o código acima do seu functions.phparquivo também.

Embora isso ainda não seja perfeito, é muito melhor que nada. Espero que ajude?

MikeSchinkel
fonte
Eu recomendo fortemente o memcached / incr () para isso, em vez de quantidades potencialmente maciças de gravações de banco de dados.
Denis de Bernardy
3
@Denis - Como o memcached requer configuração avançada do servidor, o que nem é possível em um servidor compartilhado onde a maioria dos sites WordPress está hospedada, e como essa é uma rotina de diagnóstico única ou ocasional, não vejo por que você enfatizaria a necessidade para memcached para este caso de uso ? Talvez esteja faltando alguma coisa, você pode detalhar por que alguém que precisaria mudar para um VPS ou servidor dedicado e aprender como configurar alguém para configurar o memcached deve fazê-lo apenas para evitar um grande número de acessos ao banco de dados rotina de manutenção usada?
MikeSchinkel
4

O plugin Clean Options funcionou bem para mim. A descrição do autor do plug-in parece se adequar ao que você precisa: "Encontra opções órfãs e permite a remoção da tabela wp_options".

Ainda não testei o WP-Optimize pessoalmente, mas esse também parece promissor. E ele diz que suporta o WP 2.7 (enquanto as Opções limpas mencionam apenas o suporte definitivo ao WP 2.3), bom!

Mike Lee
fonte
2

Isso não necessariamente removerá problemas, wp_optionsmas eu usei o WP-Optimize para corrigir muitos problemas de dimensionamento de banco de dados em meus sites 3.0. Ele elimina revisões de postagem desnecessárias, comentários de spam e pode corrigir automaticamente muitos problemas. No meu blog principal, o banco de dados foi reduzido de 30 MB para pouco menos de 6 MB e funciona muito mais facilmente agora.

EAMann
fonte
1

Eu executo as Opções limpas e o WP_Optimize no meu site, e a combinação faz um ótimo trabalho em manter o banco de dados em excelente forma.

Keith S.
fonte