Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Ich schaue regelmäßig in die DB und entdecke immer wieder, dass die Sessions-Tabelle die Tabelle mit dem größten Überhang ist. Woher kommt das? Ist dort etwas falsch konfiguriert?

    Oder andersherum gefragt, was beudetet "Überhang" ?

    Ich kenne aus dem Politikunterricht nur ein "Überhangsmandat".

    Gruß
    Ronny

    Linkback: https://www.modified-shop.org/forum/index.php?topic=16197.0

    franky_n

    • Experte
    • Beiträge: 4.950
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #1 am: 22. Oktober 2011, 16:50:41
    Hallo Ronny,

    am einfachsten ist das zu erklären an dem Beispiel "defragmentieren" in der Windows Welt...

    Durch das Löschen von Werten in der DB entsteht Speicherplatz der nicht genutzt wird, der "Überhang".
    Diese Lücken sind durch Optimieren der Tabellen wieder zu schließen, bedeutet die Lücke die entsteht wird durch andere Daten die noch bestehen ausgefüllt, halt wie bei einer Defragmentierung.

    SQL Befehl: OPTIMIZE TABLE ...

    Im Grunde ist eine DB in Linux ja nichts anderes als eine Datei... :)

    Viele Grüße

    Franky

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #2 am: 22. Oktober 2011, 17:11:56
    Dank Frankys Denkanstoß habe ich mal eine Rohversion gestrickt, wie man die DB-Tabellen schnell optimieren kann.
    Vielleicht kann man das auch mal ins Backend zum DB-Manager hinzufügen.

    Code: PHP  [Auswählen]
    <?php
    $conn = @mysql_connect("localhost", "db_user", "db_pass"); // hier DB-User und DB-Passwort eintragen
    if (!$conn) {
            echo "Fehlende Verbindung zur DB: " . mysql_error();
            exit;
    }
    $database = 'db_name'; // hier den DB-Namen eintragen
    function mysqlOptimizeTables($database) {
            $sql = "SHOW TABLE STATUS FROM " . $database;  
            $result = @mysql_query($sql);
            $dataFree = array();
            $x = 0;
            while(($row = @mysql_fetch_array($result,MYSQL_ASSOC)) == true){
                    if ($row["Data_free"] > 0) {
                            $sql = "OPTIMIZE TABLE " . $database . '.' . $row["Name"];
                            $optimize = @mysql_query($sql);
                            $rowFetch = @mysql_fetch_array($optimize, MYSQL_ASSOC);
                            $dataFree[$x]['Table'] = $rowFetch["Table"];
                            $dataFree[$x]['Op'] = $rowFetch["Op"];
                            $dataFree[$x]['Msg_type'] = $rowFetch["Msg_type"];
                            $dataFree[$x]['Msg_text'] = $rowFetch["Msg_text"];
                            $dataFree[$x]['optimized_bytes'] = $row["Data_free"];
                            $x++;
                    }
            }
    return $dataFree;  
    }
    echo "<pre>";
    print_r(mysqlOptimizeTables($database));
    echo "</pre>";
    ?>

    Quelle: SelfPHP - Tabellen mit Überhang in einer MySQL-DB ermitteln und optimieren

    Dieses kleine Snippet habe ich als "db_optimize.php" in /admin/ abgespeichert und rufe die Datei per Hand im Backend auf.

    Gruß
    Ronny

    Olinew

    • Gast
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #3 am: 22. Oktober 2011, 18:41:14
    Feine Sache Webkiste. Um Deine Idee mal weiter zu stricken, habe ich mal Deinen Code in eine separate Datei kopiert (db_wartung.php), auf meinen Server in ein .htaccess geschütztes Verzeichnis geladen und einen Cronjob angelegt, der die Datei jetzt sicher und brav aufruft und ausführt.

    DANKE DIR!

    Gruß
    Oli

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #4 am: 22. Oktober 2011, 18:45:28
    Man kann die https://trac.modified-shop.org/browser/trunk/xtc_installer/db_upgrade.php im Trunk auch manuell anstoßen, um die Tabellen zu optimieren.

    Ich habe in div. Foren gelesen, dass es ideal ist, vor dem OPTIMIZE ein ANALYZE zu machen, damit die Tabellen-Indices mit aktuellen Statistik-Informationen versorgt werden, was das ganze nochmals optimiert.

    Olinew

    • Gast
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #5 am: 22. Oktober 2011, 19:10:32
    Jetzt wird es ja richtig interessant hier. Nun löscht ja, wenn ich den Code richtig deute, die db_upgrade.php (Trunk) auch Daten (alte Warenkörbe) oder irre ich?
    Wäre jedenfalls eine SUPER SACHE, ein kleines Tool zu haben, dass einem per Cronjob die Wartungs- und Optimierungsarbeiten an der DB abnimmt.
    Wie könnte man das Analyze in den Code von Webkiste integrieren? Wenn ich das mache, brauche ich anschließend kein Wartungstool mehr ...  :crazy:

    Gruß
    Oli

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.303
    • Geschlecht:
    Re: Warum bekommt die DB-Tabelle 'sessions' immer einen Überhang?
    Antwort #6 am: 22. Oktober 2011, 22:26:09
    Ich führe dazu auf meinem Server täglich ein Shell Script aus.

    Gruß Gerhard
    8 Antworten
    4944 Aufrufe
    01. Juli 2012, 10:56:59 von csigg
    14 Antworten
    806 Aufrufe
    02. Januar 2024, 19:37:14 von GTB