¿Cómo puedo eliminar claves huérfanas en las tablas de la base de datos de WordPress?

10

En particular en la mesa wp_options. Después de casi 2 años de producción en el blog, parece haber aumentado mucho, y no sé cuántas basura hay.

¿Conoces un complemento que funcione con WordPress 3.0 o una consulta segura para ejecutar para buscar claves / filas huérfanas?

Pato
fuente

Respuestas:

7

No hay ninguna consulta que sea 100% segura de eliminar todo lo que no se utiliza y no eliminar esas cosas porque cualquier tema o complemento puede agregar opciones a la wp_optionstabla. Aún así, con un poco de esfuerzo, puede tener una idea bastante buena de lo que no está en uso y luego decidir manualmente cuáles de esas cosas eliminar y cuáles no.

Puede poner el siguiente código temporalmente en el functions.phparchivo de su tema y luego visitar cada (tipo de) página en su sitio público y, lo que es más importante, todas las páginas de administración en la consola de administración. Una vez que haya hecho eso, puede abrir su wp_optionstabla y mirar el campo use_count(agregado por el código a continuación) para ver qué opciones tienen un valor use_countigual a cero (el recuento de uso no tiene sentido, salvo que se haya leído o actualizado algo mayor que 1 al menos una vez desde que agregó 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'");
}

Con esto, probablemente podrá identificar las opciones que están asociadas con complementos antiguos, temas anteriores e incluso opciones propias que agregó desde el principio, pero que ya no usa. Exporte todos a una copia de seguridad (por si acaso) y luego elimine los que le resulte cómodo eliminar. Una vez que haya terminado, puede eliminar el use_countcampo (si lo desea, no hace daño que esté allí) y también eliminar el código anterior de su functions.phparchivo también.

Aunque esto todavía no es perfecto, es mucho mejor que nada. ¿Espero eso ayude?

MikeSchinkel
fuente
Recomiendo encarecidamente memcached / incr () para esto en lugar de cantidades potencialmente masivas de escrituras db.
Denis de Bernardy
3
@Denis : dado que memcached requiere una configuración avanzada del servidor, que ni siquiera es posible en un servidor compartido donde se alojan la mayoría de los sitios de WordPress, y dado que esta es una rutina de diagnóstico única u ocasional, no veo por qué enfatizarías la necesidad para memcached para este caso de uso ? Tal vez me falta algo, ¿puede detallar por qué alguien que tendría que mudarse a un VPS o un servidor dedicado y aprender cómo hacer que alguien configure Memcached debería hacerlo solo para evitar una gran cantidad de accesos a la base de datos para raramente Utilizado rutina de mantenimiento?
MikeSchinkel
4

El complemento Opciones de limpieza me ha funcionado bien. La descripción del autor del complemento parece ajustarse a lo que necesita: "Encuentra opciones huérfanas y permite su eliminación de la tabla wp_options".

No he probado WP-Optimize todavía personalmente, pero ese también parece prometedor. Y dice que es compatible con WP 2.7 (mientras que Clean Options solo menciona soporte definitivo para WP 2.3), ¡genial!

Mike Lee
fuente
2

Esto no eliminará necesariamente los problemas, wp_optionspero he utilizado WP-Optimize para solucionar muchos problemas de tamaño de la base de datos en mis sitios 3.0. Elimina revisiones de publicaciones innecesarias, comentarios de spam y puede solucionar automáticamente muchos problemas. En mi blog principal, la base de datos se redujo de 30 MB a poco menos de 6 MB y ahora funciona mucho mejor.

EAMann
fuente
1

Ejecuto Clean Options y WP_Optimize en mi sitio, y el combo hace un excelente trabajo al mantener la base de datos en excelente estado.

Keith S.
fuente