---
title: "Důležitost údržby databáze WordPress pro výkon a bezpečnost (actionscheduler _actions a _logs) (AKTUALIZOVÁNO 2.11.2023)"
id: "4439"
type: "post"
slug: "dulezitost-udrzby-databaze-wordpress-pro-vykon"
published_at: "2023-10-20T09:00:32+00:00"
modified_at: "2025-03-25T07:27:58+00:00"
url: "https://ffs.cz/dulezitost-udrzby-databaze-wordpress-pro-vykon/"
markdown_url: "https://ffs.cz/dulezitost-udrzby-databaze-wordpress-pro-vykon.md"
excerpt: "Při provozování webových stránek postavených na systému WordPress je důležité pravidelně udržovat a spravovat databázi. Dvě klíčové tabulky, které vyžadují pozornost, jsou actionscheduler_actions a actionscheduler_logs. Údržba tabulky actionscheduler_actions Tabulka actionscheduler_actions je zodpovědná za správu plánovaných úloh a akcí na vašich..."
taxonomy_category:
  - "WordPress pro začátečníky"
taxonomy_post_tag:
  - "🤖 AI – korekce a formátování textů: 0 %"
  - "🧠 Human intelligence: 100 %"
---

[Přejít k obsahu](#content)
# Důležitost údržby databáze WordPress pro výkon a bezpečnost (actionscheduler _actions a _logs) (AKTUALIZOVÁNO 2.11.2023)

- 🔺Dne: 20. 10. 2023
- 🟢Aktualizace: 25. 3. 2025

Jak byl napsán tento článek:

- 🤖 AI – korekce a formátování textů: 0 % 🧠 Human intelligence: 100 %

Obsah článku

[https://ffs.cz/wp-content/uploads/2023/10/websupport.sk_db.websupport.sk_phpMyAdmin.png](https://ffs.cz/wp-content/uploads/2023/10/websupport.sk_db.websupport.sk_phpMyAdmin.png)
Při provozování webových stránek postavených na systému WordPress je důležité pravidelně udržovat a spravovat databázi. Dvě klíčové tabulky, které vyžadují pozornost, jsou `actionscheduler_actions` a `actionscheduler_logs`.

## Údržba tabulky `actionscheduler_actions`

Tabulka `actionscheduler_actions` je zodpovědná za správu plánovaných úloh a akcí na vašich stránkách. Ukládá se zde informace o proběhlých, běžících a chybějících akcích. Defaultně (ve výchozím nastavení) by se záznamy se stavem „complete“ a „delete“ měly automaticky čistit po 30 dnech, ale občas tento proces může selhat. Je proto důležité pravidelně kontrolovat stav této tabulky a provádět ruční čištění, pokud je to nezbytné. Uchovávání těchto záznamů v tabulce může vést k růstu velikosti databáze a zpomalení výkonu. Pravidelné čištění této tabulky pomáhá udržovat rychlou odezvu webové stránky a zajišťuje efektivní správu plánovaných úloh.

## Údržba tabulky `actionscheduler_logs`

Tabulka `actionscheduler_logs` uchovává záznamy o všech proběhlých úlohách a akcích. S rostoucím počtem záznamů může růst velikost této tabulky a tím i velikost celé databáze. Odstranění starých záznamů z této tabulky je důležité z hlediska udržování výkonnosti a bezpečnosti vašich stránek. Pravidelné mazání starých záznamů pomáhá minimalizovat riziko přetížení databáze a zvyšuje celkovou stabilitu vašeho webu.

## Závěr

Pravidelná údržba a správa databáze WordPress jsou klíčové pro zajištění efektivního a bezproblémového provozu webových stránek. Pravidelné čištění tabulek `actionscheduler_actions` a `actionscheduler_logs` pomáhá udržovat výkon a minimalizuje riziko potenciálních bezpečnostních hrozeb spojených s růstem velikosti databáze.

## Snippet pro automatické čístění

Snippet, který je přiložen níže, lze vložit na váš web dvěma způsoby. Prvním způsobem je přímo do souboru `functions.php` vaší šablony. Je však důležité, abyste předtím učinili zálohu webu a případně používali Child theme, aby v případě aktualizace hlavní šablony nedošlo k přemazaní snippetu ve `functions.php`.

Druhým způsobem je pomocí pluginu Code Snippets (nebo pomocí jiného vhodného pluginu na vkládání snippetů).

Kód automatický maže zaznamy v tabulce _logs starší 1 dne a _actions jednou za 7 dní. navíc, v administraci na nástěnce zobrazí widget se stavem těchto tabulek. Viz obrázek.

**[Seznam změn 3.11.2023:](#changelog_snippet)**

1. **Přidána funkčnost:**
  - Přidáno tlačítko pro manuální spuštění údržby databáze.
  - Implementována automatická funkce pro úklid databáze, která se spouští při načtení widgetu.
  - Při načtení widgetu implementována optimalizace tabulek pro lepší výkon.

2. **Vylepšení:**
  - Zlepšena čitelnost kódu přidáním podrobnějších komentářů.
  - Zlepšena efektivita údržby databáze optimalizací dotazů pro mazání starých záznamů.
  - Přidáno informativní sdělení o frekvenci automatické údržby.

3. **Zpracování chyb:**
  - Vylepšeno zpracování chyb při údržbě databáze.
  - Implementovány chybové zprávy pro případy, kdy údržba databáze narazí na problémy.

4. **Restrukturalizace kódu:**
  - Přepracován kód pro zlepšení jeho organizace a čitelnosti.

5. **Optimalizace:**
  - Zahrnuta optimalizace tabulek ‚actionscheduler_actions‘ a ‚actionscheduler_logs‘ při načtení widgetu.

6. **Dokumentace:**
  - Přidány vložené komentáře k vysvětlení účelu a funkcionality různých částí kódu.

7. **Zlepšení použitelnosti:**
  - Poskytnuty další informace ohledně automatického procesu úklidu v widgetu.

8. **Opravy chyb:**
  - Vyřešeny problémy související s procesem čištění tabulky ‚actionscheduler_logs‘.

9. **Vylepšení výkonu:**
  - Optimalizovány dotazy pro získání velikosti tabulky a počtu záznamů pro lepší výkon.

10. **Správa údržby:**
  - Přidány funkce pro plánování a zrušení plánovaných úloh automatické údržby.

11. **Vylepšení uživatelského rozhraní:**
  - Přidáno formátování pro informační a chybové zprávy pro zlepšení uživatelské zkušenosti.

12. **Rozšíření funkcí:**
  - Rozšířeny schopnosti widgetu o informace o plánovaných úlohách údržby.

```
/* VERZE 03.11.2023 */

function get_table_size($table_name) {
    global $wpdb;
    $result = $wpdb->get_row("SHOW TABLE STATUS LIKE '$table_name'");
    return round($result->Data_length / 1024 / 1024, 2); // získání velikosti tabulky v MB
}

function custom_report_widget_function() {
    global $wpdb;
    $actions_types = array('complete', 'delete', 'canceled', 'failed', 'pending'); // typy akcí

    $actionscheduler_actions_size_before = get_table_size($wpdb->prefix . 'actionscheduler_actions'); // získání velikosti tabulky 'actionscheduler_actions'
    $logs_size_before = get_table_size($wpdb->prefix . 'actionscheduler_logs'); // získání velikosti tabulky 'actionscheduler_logs'

    $logs_count_before = $wpdb->get_var("
        SELECT COUNT(*) as total_count
        FROM {$wpdb->prefix}actionscheduler_logs
    "); // získání celkového počtu záznamů v tabulce 'actionscheduler_logs'

    $logs_table_size_MB = $wpdb->get_var("
        SELECT ROUND((data_length + index_length) / 1024 / 1024, 2) as table_size_MB
        FROM information_schema.TABLES
        WHERE table_schema = '{$wpdb->dbname}'
        AND table_name = '{$wpdb->prefix}actionscheduler_logs'
    "); // získání velikosti tabulky 'actionscheduler_logs' v MB

    // Výpis informací o tabulkách a počtu záznamů
    echo "<p>Aktuální počet záznamů v tabulce <b>actionscheduler_logs</b>: ${logs_count_before}</p>";
    echo "<p>Velikost tabulky <b>actionscheduler_logs</b>: ${logs_table_size_MB} MB</p>";
    echo "<p>Celková velikost tabulky <b>actionscheduler_actions</b>: ${actionscheduler_actions_size_before} MB</p>";

    // Výpis počtu záznamů pro každý typ akce
    foreach ($actions_types as $action_type) {
        $action_count_before = $wpdb->get_var($wpdb->prepare("
            SELECT COUNT(*)
            FROM {$wpdb->prefix}actionscheduler_actions
            WHERE status = %s
        ", $action_type));
        echo "<p>Počet záznamů se stavem '${action_type}': ${action_count_before}</p>";
    }

    // Zpracování údržby na základě stisknutí tlačítka
    if (isset($_POST['autoclean_button'])) {
        $logs_cleanup_result = autoclean_action_scheduler();
        if ($logs_cleanup_result !== false) {
            echo "<p style='color:green'>Údržba tabulky actionscheduler_logs byla provedena úspěšně.</p>";
            echo "<p style='color:green'>Údržba tabulky actionscheduler_actions byla provedena úspěšně.</p>";
        } else {
            echo "<p style='color:red'>Při údržbě tabulky actionscheduler_logs došlo k chybě.</p>";
            echo "<p style='color:red'>Při údržbě tabulky actionscheduler_actions došlo k chybě.</p>";
        }
    }

    // Tlačítko pro spuštění údržby
    echo '<form method="post">';
    echo '<input type="submit" name="autoclean_button" value="Spustit údržbu databáze" class="button button-large button-primary">';
	
	echo '<pre>Údržba probíhá automatický pokaždé, když se načte tento widget.<br />V _logs je odstraněno vše starší 1 dne a v _actions stavy:<br />complete, delete, failed starší 7 dní. Nebo použijte tlačítko.</pre>';
    echo '</form>';

    // Automatická údržba při načítání widgetu
    autoclean_action_scheduler();
}

function autoclean_action_scheduler() {
    global $wpdb;

    // Údržba tabulek 'actionscheduler_logs' a 'actionscheduler_actions'
    $actionscheduler_actions_size_before = get_table_size($wpdb->prefix . 'actionscheduler_actions');
    $logs_deleted = $wpdb->query("
        DELETE FROM {$wpdb->prefix}actionscheduler_logs
        WHERE log_date_gmt < DATE_SUB(NOW(), INTERVAL 1 DAY)
    ");

    $actions_deleted = $wpdb->query("
        DELETE FROM {$wpdb->prefix}actionscheduler_actions
        WHERE status IN ('complete', 'delete', 'failed')
        AND (last_attempt_gmt < DATE_SUB(NOW(), INTERVAL 7 DAY) OR last_attempt_gmt IS NULL)
    ");

    // Vrácení informace o úspěchu či chybě při údržbě
    if ($logs_deleted !== false || $actions_deleted !== false) {
        return true;
    } else {
        return false;
    }
}

function optimize_actionscheduler_tables() {
    global $wpdb;
    $wpdb->query("OPTIMIZE TABLE {$wpdb->prefix}actionscheduler_actions");
    $wpdb->query("OPTIMIZE TABLE {$wpdb->prefix}actionscheduler_logs");
}

// Funkce pro plánování automatické údržby
function schedule_autoclean_action() {
    if (!wp_next_scheduled('autoclean_action_event')) {
        wp_schedule_event(time(), 'daily', 'autoclean_action_event');
    }
}

// Funkce pro zrušení plánování automatické údržby
function unschedule_autoclean_action() {
    $timestamp = wp_next_scheduled('autoclean_action_event');
    wp_unschedule_event($timestamp, 'autoclean_action_event');
}

// Funkce pro zpracování plánované události
function handle_autoclean_action_event() {
    autoclean_action_scheduler();
}

// Háčky pro správu plánování a zpracování automatické údržby
add_action('wp_dashboard_setup', function () {
    wp_add_dashboard_widget('custom_report_widget', 'Stav actionscheduler _actions a _logs', 'custom_report_widget_function');
    optimize_actionscheduler_tables(); // Optimalizace tabulek při načtení widgetu
    schedule_autoclean_action(); // Plánování automatické údržby
});

// Háček pro zpracování plánované události
add_action('autoclean_action_event', 'handle_autoclean_action_event');
```

[Zpět na blog](https://ffs.cz/blog/)

[Předchozí](https://ffs.cz/alternativy-k-google-analytics-prehledne-sestavena-tabulka-privacy-friendly-webove-analytiky/)

[Další](https://ffs.cz/mini-plugin-acl-css/)

## Napsat komentář [Zrušit odpověď na komentář](/dulezitost-udrzby-databaze-wordpress-pro-vykon/#respond)
