Announcement

Collapse
No announcement yet.

Optimize Table Script Array durchlaufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Optimize Table Script Array durchlaufen

    Danke an alle
    Zuletzt editiert von Pillemon; 11.08.2009, 15:53.

  • #2
    Ganz quick and dirty, ungefähr so
    PHP Code:
    for ($i=0$i<count($mysql_test_array);$i++)
    {
    // mysql_query mit OPTIMIZE TABLE mit Tabellenname aus $mysql_test_array[$i] ausführen

    Die Namen der Tabellen stehen ja alle im mysql_test_array[x], also sollte es so gehen.
    "A common mistake that people make
    when trying to design something completely foolproof
    is to underestimate the ingenuity of complete fools.
    "
    >>> Douglas Adams, Mostly Harmless
    -------------------------------------------------------
    Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

    Comment


    • #3
      Originally posted by Sascha P. View Post
      Ganz quick and dirty, ungefähr so
      PHP Code:
      for ($i=0$i<count($mysql_test_array);$i++)
      {
      // mysql_query mit OPTIMIZE TABLE mit Tabellenname aus $mysql_test_array[$i] ausführen

      Die Namen der Tabellen stehen ja alle im mysql_test_array[x], also sollte es so gehen.
      Aber so nimmt der doch das ganze Array, also Tabellenname, Feldname und Attribute, ich hätte gerne das er nur die Tabellennamen optimiert.

      Mein Script sieht nun so aus:

      PHP Code:
      <?php
      include '../lib/mysql_test_array_table.php';



      for (
      $i=0$i<count($mysql_test_array);$i++) 

          
      $db->queryStmt("OPTIMIZE TABLE " $mysql_test_array[$i]);
      }
      echo 
      "Datenbank wurde optimiert";

      ?>
      Wäre das so richtig wie Du es meintest?


      Es kommt dann bei mir jedoch zum MDB2Error:
      MDB2 Error: syntax error
      [OPTIMIZE TABLE ]


      _doQuery: [Error message: Could not execute statement] [Last executed query: OPTIMIZE TABLE ] [Native code: 1064] [Native message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1]

      Comment


      • #4
        Hallo,
        Originally posted by Sascha P. View Post
        ...Die Namen der Tabellen stehen ja alle im mysql_test_array[x], also sollte es so gehen.
        Nein, geht so nicht. Das Array ist kein indiziertes Array, sondern ein Assoziatives. Sprich die Tabellennamen sind hier nicht die Werte sondern die Schlüssel.

        Besser wäre:
        PHP Code:
        ...
        foreach (
        array_keys($mysql_test_array) as $tabName) {
          
        // mysql_query mit OPTIMIZE TABLE mit Tabellenname $tabName ausführen
          
        ...
        }
        ... 
        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Originally posted by Falk Prüfer View Post
          Hallo,


          Nein, geht so nicht. Das Array ist kein indiziertes Array, sondern ein Assoziatives. Sprich die Tabellennamen sind hier nicht die Werte sondern die Schlüssel.

          Besser wäre:
          PHP Code:
          ...
          foreach (
          array_keys($mysql_test_array) as $tabName) {
            
          // mysql_query mit OPTIMIZE TABLE mit Tabellenname $tabName ausführen
            
          ...
          }
          ... 
          Gruß Falk

          Hallo Falk,

          mein Script sieht nun so aus:

          PHP Code:
          <?php
          include '../common.php';
          include 
          '../lib/mysql_test_array_table.php';


          foreach (
          array_keys($mysql_test_array) as $tabName) {

              
          $db->queryStmt("OPTIMIZE TABLE " $tabName);
          }
          echo 
          "Datenbank wurde optimiert";
          ?>
          Wenn ich das Script nun ausführe kommt folgender Fehler:
          ( ! ) Parse error: syntax error, unexpected $end in /var/www/test/scripts/optimize_tables.php on line 11

          Woran liegt das?

          Comment


          • #6
            Originally posted by Pillemon View Post
            PHP Code:
            foreach (array_keys($mysql_test_array) as $tabName) { 
            Mach hier mal das abschließende { weg, dann sollte es gehen.
            "A common mistake that people make
            when trying to design something completely foolproof
            is to underestimate the ingenuity of complete fools.
            "
            >>> Douglas Adams, Mostly Harmless
            -------------------------------------------------------
            Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

            Comment


            • #7
              Besten Dank an euch!

              Comment


              • #8
                In welchen Fällen, bzw. wann und wie oft sollte man überhaupt OPTIMIZE TABLE ausführen? Die mySQL-Dokumentation ist diesbezüglich ja leider recht unkonkret:
                "In most setups, you need not run OPTIMIZE TABLE at all."

                Ist während der Optimierung die Tabelle für andere Anfragen gesperrt? Was passiert, falls der Datenbankserver abstürzen sollte? Muss man vorher ein Backup machen? Alles Fragen, die mich bisher davon abgehalten haben, mich näher mit Tabellendefragmentierung auseinanderzusetzen ...

                Comment

                Working...
                X