Tabelle wird gelockt, soll aber nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabelle wird gelockt, soll aber nicht

    Hallo,

    ok, blöde Überschrift, aber weiter im Text

    Folgendes Problem:
    Auf meinem Server muß jede 15 Minuten ein Statistikupdate ausgeführt werden (sonst wird gecached) und das ist eine recht komplizierte Mysql Abfrage mit Joins über 3 oder 4 Tabellen, und Abfrage von teilweise bis zu 20.000 Datensätzen.
    Das Query dauert ca. 20 Sekunden zum Ausführen.

    Das Problem an der Sache ist jetzt, mein Mysql Locked für den Zeitraum die 3 Tabellen, wodurch alle anderen Prozesse natürlich nicht mehr drauf zugreifen können. Das ist natürlich total beschissen, weil die Connection Queue bis auf 100 anläuft, und dann nix mehr geht (Too many Connections)

    Gibt es da keine Möglichkeit ohne Lock zu arbeiten, dass heißt auf die Tabelle darf auch so zugegriffen werden? Wenn da jetzt zwischendurch mal ein paar Inserts drin sind, und die zahlen nicht 100% korrekt sind, ist das nicht so schlimm, nur halt darf nicht der ganze Server blockiert werden.

    Einer ne Idee, oder ist das unmöglich?

    Sonst muß ich anfangen, und das Query in viele kleine Subqueries zerlegen, und das macht das ganze noch viel langsamer, und aber es funktioniert dann wenigstens einigermaßen.

    Christopher
    http://www.freehost-script.com

    Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

  • #2
    wenn ich das richtig interpretiere könnt dir dieser link http://www.mysql.com/doc/en/LOCK_TABLES.html weiterhelfen

    gruss jochen

    Kommentar


    • #3
      Ne, so richtig nicht.....das Problem ist, dass das Select auf die Tabellen so lange dauert, und darum während der Ausführung alle anderen Queries blockiert......
      http://www.freehost-script.com

      Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

      Kommentar


      • #4
        Du hast da relativ wenige Möglichkeiten ... zunächst einmal würde ich prüfen ob die Query korrekt ist ... dann ob die Indizes ausreichen (DESCRIBE sollte dabei helfen) ...

        Als letzte Möglichkeit bleibt Dir bei der MySQL noch ein anderer Table-Handler ... InnoDB bringt gegenüber MyISAM ein Transaktionsmodell ... im übrigen wird ein Record-Locking anstatt einem Table Locking verwendet.
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Habe die SQL Queries jetzt auch nochmal was optimiert, hält das Problem zur Zeit etwas in Grenzen. Das Problem sind halt die Joins über die Tabellen wodurch die eine große Query recht langsam wird.

          Ohne Joins ist es zwar insgesamt ca. 200% langsamer, aber dann schmiert wenigstens net die ganze Maschine ab.

          @Goth: Das mit der anderen DB Art hab ich mir auch schon überlegt, werde mir das wohl denke ich mal etwas genauer ansehen.

          Danke schonmal.
          http://www.freehost-script.com

          Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

          Kommentar

          Lädt...
          X