Jak mogę usunąć osierocone klucze w tabelach bazy danych WordPress?

10

W szczególności w tabeli wp_options. Po prawie 2 latach tworzenia blogów wydaje się, że znacznie wzrosło i nie wiem, ile tam jest bzdur.

Czy znasz wtyczkę, która działa z WordPress 3.0 lub bezpieczne zapytanie do uruchomienia w celu wyszukania sierocych kluczy / wierszy?

Kaczor
źródło

Odpowiedzi:

7

Nie ma zapytania, które będzie w 100% pewne, aby usunąć wszystko nieużywane i nie usunąć tych rzeczy, ponieważ każdy motyw lub wtyczka może dodawać opcje do wp_optionstabeli. Jednak przy odrobinie wysiłku możesz uzyskać całkiem niezłe pojęcie o tym, co nie jest używane, a następnie ręcznie zdecydować, które z tych elementów należy usunąć, a które nie.

Możesz tymczasowo wstawić następujący kod do functions.phppliku motywu, a następnie odwiedzić każdą (typ) stronę w witrynie publicznej i, co ważniejsze, wszystkie strony administracyjne w konsoli administracyjnej. Gdy to zrobisz, możesz otworzyć swoją wp_optionstabelę i spojrzeć na pole use_count(dodane przez poniższy kod), aby zobaczyć, które opcje mają wartość use_countrówną zero (liczba użycia jest w większości bez znaczenia, poza tym, że więcej niż 1 został przeczytany lub zaktualizowany przynajmniej raz, odkąd dodałeś ten kod).

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

Dzięki temu prawdopodobnie będziesz w stanie zidentyfikować opcje, które są powiązane z dawno minionymi wtyczkami, wcześniejszymi motywami, a nawet własnymi opcjami, które wcześniej dodałeś, ale których już nie używasz. Wyeksportuj je wszystkie do kopii zapasowej (na wszelki wypadek), a następnie usuń te, które chcesz usunąć. Po zakończeniu możesz usunąć use_countpole (jeśli chcesz, nie szkodzi, aby tam było), a także usunąć powyższy kod z functions.phppliku.

Chociaż nadal nie jest to idealne, jest o wiele lepsze niż nic. Mam nadzieję, że to pomoże?

MikeSchinkel
źródło
Chciałbym gorąco polecić memcached / INCR () dla tego zamiast potencjalnie ogromne ilości zapisów dB.
Denis de Bernardy
3
@Denis - Ponieważ memcached wymaga zaawansowanej konfiguracji serwera, co nie jest nawet możliwe na serwerze współdzielonym, na którym hostowana jest większość witryn WordPress, a ponieważ jest to jednorazowa lub okazjonalna procedura diagnostyczna, nie rozumiem, dlaczego podkreślasz potrzebę dla memcached dla tego przypadku użycia ? Może coś mi brakuje, czy możesz wyjaśnić, dlaczego ktoś, kto musiałby przejść na serwer VPS lub serwer dedykowany i dowiedzieć się, jak skonfigurować kogoś z memcached, powinien to zrobić, aby uniknąć dużej liczby trafień do bazy danych rzadko stosowałeś rutynową konserwację?
MikeSchinkel
4

Wtyczka Clean Options działa dla mnie dobrze. Opis wtyczki autorstwa autora wydaje się pasować do tego, czego potrzebujesz: „Znajduje osierocone opcje i pozwala na ich usunięcie z tabeli wp_options”.

Nie próbowałem jeszcze WP-Optimize osobiście, ale ta też wygląda obiecująco. I mówi, że obsługuje WP 2.7 (podczas gdy czyste opcje wspominają tylko o konkretnej obsłudze WP 2.3), fajnie!

Mike Lee
źródło
2

To niekoniecznie usunie problemy, wp_optionsale użyłem WP-Optimize, aby naprawić wiele problemów z rozmiarami baz danych w moich witrynach 3.0. Usuwa zbędne korekty postów, komentarze do spamu i może automatycznie rozwiązać wiele problemów. Na moim głównym blogu DB został zmniejszony z 30 MB do nieco poniżej 6 MB i działa teraz znacznie płynniej.

EAMann
źródło
1

Na mojej stronie uruchamiam zarówno Clean Options, jak i WP_Optimize, a kombinacja wykonuje świetną robotę, utrzymując bazę danych w świetnej formie.

Keith S.
źródło