Wie kann ich verwaiste Schlüssel in WordPress-Datenbanktabellen löschen?

10

Insbesondere in der Tabelle wp_options. Nach fast 2 Jahren Blog-Produktion scheint es viel zugenommen zu haben, und ich weiß nicht, wie viel Mist da drin ist.

Kennen Sie ein Plugin, das mit WordPress 3.0 oder einer sicheren Abfrage funktioniert, um verwaiste Schlüssel / Zeilen zu durchsuchen?

Erpel
quelle

Antworten:

7

Es gibt keine Abfrage, die zu 100% sicher ist, dass alle nicht verwendeten Elemente gelöscht werden und diese nicht gelöscht werden, da jedes Thema oder Plugin der wp_optionsTabelle Optionen hinzufügen kann . Trotzdem können Sie mit ein wenig Aufwand eine ziemlich gute Vorstellung davon bekommen, was nicht verwendet wird, und dann manuell entscheiden, welche dieser Dinge gelöscht werden sollen und welche nicht.

Sie können den folgenden Code vorübergehend in die functions.phpDatei Ihres Themas einfügen und dann jede (Art von) Seite auf Ihrer öffentlich zugänglichen Site und vor allem alle Administrationsseiten in der Administratorkonsole besuchen. Sobald Sie dies getan haben, können Sie Ihre wp_optionsTabelle öffnen und das Feld use_count(hinzugefügt durch den folgenden Code) überprüfen, um use_countfestzustellen, welche Optionen gleich Null sind (die Anzahl der Verwendungen ist meistens bedeutungslos, außer dass etwas größer als 1 gelesen oder aktualisiert wurde mindestens einmal, seit Sie diesen Code hinzugefügt haben.)

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'");
}

Auf diese Weise können Sie wahrscheinlich Optionen identifizieren, die mit längst vergangenen Plugins, früheren Themen und sogar eigenen Optionen verknüpft sind, die Sie frühzeitig hinzugefügt, aber nicht mehr verwendet haben. Exportieren Sie sie alle in ein Backup (nur für den Fall) und löschen Sie dann diejenigen, die Sie bequem löschen möchten. Sobald Sie fertig sind, können Sie das use_countFeld entfernen (wenn Sie möchten, tut es nicht weh, wenn es dort ist) und auch den obigen Code aus Ihrer functions.phpDatei entfernen .

Obwohl dies immer noch nicht perfekt ist, ist es viel besser als nichts. Ich hoffe es hilft?

MikeSchinkel
quelle
Ich würde memcached / incr () dringend empfehlen, anstatt potenziell große Mengen an DB-Schreibvorgängen.
Denis de Bernardy
3
@Denis - Da für memcached ein erweitertes Server-Setup erforderlich ist, das auf einem gemeinsam genutzten Server, auf dem die meisten WordPress-Sites gehostet werden, nicht einmal möglich ist, und da dies eine einmalige oder gelegentliche Diagnoseroutine ist, verstehe ich nicht, warum Sie die Notwendigkeit hervorheben würden für für diesen Anwendungsfall zwischengespeichert ? Vielleicht fehlt mir etwas. Können Sie genau beschreiben, warum jemand, der zu einem VPS oder einem dedizierten Server wechseln und lernen muss, wie man memcached konfiguriert, oder jemanden dazu bringt, memcached zu konfigurieren, dies nur tun sollte, um selten eine große Anzahl von Datenbanktreffern zu vermeiden gebrauchte Wartungsroutine?
MikeSchinkel
4

Das Plugin Clean Options hat bei mir gut funktioniert. Die Beschreibung des Plugins durch den Autor scheint genau zu Ihren Anforderungen zu passen: "Findet verwaiste Optionen und ermöglicht deren Entfernung aus der Tabelle wp_options."

Ich habe WP-Optimize noch nicht persönlich ausprobiert , aber das sieht auch vielversprechend aus. Und es heißt, dass es WP 2.7 unterstützt (während Clean Options nur die definitive Unterstützung für WP 2.3 erwähnt), schön!

Mike Lee
quelle
2

Dies wird nicht unbedingt Probleme mit beseitigen, wp_optionsaber ich habe WP-Optimize verwendet , um viele Probleme mit der Datenbankgröße auf meinen 3.0-Sites zu beheben. Es löscht nicht benötigte Post-Revisionen, Spam-Kommentare und kann viele Probleme automatisch beheben. In meinem Hauptblog wurde die Datenbank von 30 MB auf knapp 6 MB reduziert und läuft jetzt viel reibungsloser.

EAMann
quelle
1

Ich führe sowohl Clean Options als auch WP_Optimize auf meiner Site aus, und die Combo leistet hervorragende Arbeit, um die Datenbank in hervorragendem Zustand zu halten.

Keith S.
quelle