PHP Automatisches Optimieren der Datenbank

rocket81

Lt. Commander
Registriert
Dez. 2007
Beiträge
1.054
Hallo,
Ich bin auf der Suche nach nem Befehlt, der automatisch alle Tabllen einer Datenbank optimiert...habt ihr da was? :)

Das ganze würde ich dann in n Cronjob packen, so dass die DB immer optimiert wird bevor ein Backup erstellt wird.

Danke
 
jo bin die ganze zeit am rumsuchen, aber was gescheites finde ich nich ^^

hab jetz den befehl "OPTIMIZE TABLES" gefunden..weiß aber nich wie ich die tabellen alle auslesen kann, sonst müsste ich die alle manuell angeben :/
 
PHP:
<?

$db_name = "xxx";
$db_passwd = "xxx";

mysql_connect("localhost","$db_name","$db_passwd");

$alltables = mysql_query("SHOW TABLES");
while ($table = @mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       mysql_query("OPTIMIZE TABLE '".$tablename."'")
           or die(mysql_error());
   }
}

?>

So sieht mein Script aus...wenn ich das über den Browser aufrufe bekomme ich eine weiße Seite aber die Datenbank wurde nicht optimiert... :/
 
"Überhang" ist rel. schwammig, findest nicht? Mach mal nen Screen und poste dann dein relationales Datenbankschema.
 
unbenanntg9wv.jpg

was für ein schema soll ich in welcher form posten? ^^
 
Achso der Überhang. Hm.. Naja das ist nichts anderes als die Folge von Fragmentierung, wie bei einer Platte. Örrrr, hm wo soll ich anfangen... Vielleicht wie folgt:
Stell dir vor du hast einen Datensatz der 5kb braucht und das in etwa die Seitegröße in deiner Daba ist. (Die Zahlen sind nun vollkommen irrelevant, es geht ums Verständnis). Jetzt ersetzt du den Datensatz durch einen anderen Datensatz der nur 4,9kb brauch, so hast du eine interne Fragmentierung ( = "Überhang") von 0,1kb, da du ja keine halben Tupel anlegen kannst. Ich glaube MySQL ist da nicht so schlau den Speicher regelmäßig zu reorganisieren. Deshalb mein Vorschlag (ist nur kurz zusammengeschrieben, sollte aber gehen...):

Code:
<?

$db_name = "xxx";
$db_passwd = "xxx";

mysql_connect("localhost","$db_name","$db_passwd"); 
$res = mysql_list_tables($dbname);

while ($row = mysql_fetch_row($res)) {
    $tables .= $row[0].", ";
}

$tables = substr($tables, 0, -2);

mysql_query("OPTIMIZE TABLE ".$tables);

?>

Ist nicht getestet, wie gesagt, on-the-fly. Probiers mal so.
 
Keine Fehlermeldung aber es funktioniert immer noch nicht... :/
 
Hmm... gute Frage.. Schon mal intensiver google angeworfen? Mehr fällt mir dazu spontan auch net ein...
 
jop ich hab hab schon eine scripte getestet...aber irgendwie wills nich funktionieren :(
achja, vllt. weils ne .phpx datei is?
 
Dann funzt der exec() Befehl für das Backup nicht mehr -.-

Okay, ich habs nochmal als .php versucht...geht auch nicht :O
 
Zuletzt bearbeitet:
Schaue doch mal ins php Errorlog und Apache Errorlog. Kann mir nicht vorstellen das dort nicht ein Hinweis auf den Fehler zu finden ist.

Btw: Von der Verwendung von mysql_list_tables(); rate ich ab. Das ist obsolete und ein "SHOW TABLES FROM DATENBANK-NAME" wäre hier die bessere Wahl.
 
Zurück
Oben