Performance Problem Php / Mysql

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

  • Performance Problem Php / Mysql

    Hallo,

    wir haben in den letzten Monaten mit PHP und MySQL einen elektronischen Teilekatalog programmiert. Die Software arbeitet mit bis zu 50.000 Artikeln problemlos. Leider haben wir am Wochenende festgestellt, dass mit erwarteteten 500.000 - bis 2 Mio. Artikelen die ganze Anwendung zu stehen scheint. Dauert allles bis ca. 5 Minuten. Wir haben schon einige primary-keys, indizies, uniques etc. definiert, aber null Erfahrung, ob das so richtig ist.

    Da wir noch keine Erfahrungen mit so einem Problem haben, wüsste ich gerne wo wir mit der Optimierung anfangen könten. Sollten wir am Besten die einezelnen PHP Scripte überprüfen und optimieren, oder ist das Problem eher bei MySQL zu suchen? Ist es wohl wahrscheinlicher, dass unterschiedliche PHP Abfragen die Performance runter ziehen, oder sind solche Einbußen eher mit einer Indexierung von Datenbanken zu beheben? Ich weiss, das 2 Miollionen Positionen für MySQl eigentlich kein Problem sind, leider haben wir aber keine Erfahrung in der Datenbankoptimierung.

    Unsere ersten Tests haben gezeigt, dass schon eine reine Suche über 2 Spalten unsere Performance fast stehen lässt.

    Vielen Dank für jede Antwort und jeden Hinweis zur Optimierung.

  • #2
    Ich glaube, das wäre eher was für das Brainstorming-Forum!

    (Ich glaube, ich wäre ein gute Moderator =P)

    Kommentar


    • #3
      ich verschieb's erstmal zu SQL.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        ...aha, danke. eine frage haben ich noch, gibt es tools welche mir die performance von php / mysql prozessen darstellen können. antworten auf o.g. frage bitte nicht vergessen.

        Kommentar


        • #5
          Original geschrieben von Happy Nihilist
          (Ich glaube, ich wäre ein gute Moderator =P)
          OffTopic:
          ist das ne bewerbung?
          h.a.n.d.
          Schmalle

          http://impressed.by
          http://blog.schmalenberger.it



          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
          ... nur ohne :-)

          Kommentar


          • #6
            Original geschrieben von schmalle
            OffTopic:
            ist das ne bewerbung?
            OffTopic:
            Ich bewerbe mich nicht - ich lasse mich anheuern

            Kommentar


            • #7
              hmm,

              du könntest ja spaßes halber ein paar deiner queries posten, wir könnten drüber diskutieren, ...

              dings ( ) hat letztens auch ne klasse hier im forum veröffentlicht, zum performance messe, vielleicht hilft das ja auch ....
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                http://www.phphq.de/mysql.de/manual.de_289.html
                Yeah !

                Kommentar


                • #9
                  Original geschrieben von derHund
                  hdings
                  *grml*

                  abgesehen von den äußerungen des gemeinen fußvolks hier solltest du uns deine datenbankstrukturmitteilen und die abfragen, die du absetzt

                  da lässt sich vielleichtnoch das ein oder andere quentchen geschwindigkeit rausholen
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    ok, erstmal danke für die ganzen antworten. ich weiß gar nicht genau mit welchem code ich anfangen soll. ich poste mal eine wenig. kann ich kit phpmyadmin die datenbank struktur auseleden?

                    <?

                    session_cache_limiter('nocache');
                    session_start();

                    include_once("../db/db.inc.php");

                    include_once("../lib/array.countries.php");
                    include_once("../lib/functions.php");

                    include_once("../lib/class.FormData.php");
                    include_once("../lib/class.System.php");
                    include_once("../lib/class.Zone.php");
                    include_once("../lib/class.Tarif.php");
                    include_once("../lib/class.Kunde.php");
                    include_once("../lib/class.Kundenoptionen.php");
                    include_once("../lib/class.Artikel.php");
                    include_once("../lib/class.Suchbegriff.php");
                    include_once("../lib/class.Bestellung.php");

                    set_time_limit(1200000);

                    define("DEBUG_VARS", FALSE);

                    //echo "<hr>Session ID: ".session_id()."<hr>";

                    //________________________________________________________________________
                    //
                    // System gesperrt => Seite mit Meldung (kein Login moeglich)
                    //________________________________________________________________________

                    $system = new System();
                    $system->read_db_current_state();

                    if($system->status != "aktiv")
                    {
                    session_unset();
                    session_destroy();

                    include("pages/system.view.php");

                    exit(0);
                    }

                    //________________________________________________________________________
                    //
                    // Bei jedem Request ausser beim Einloggen ...
                    //________________________________________________________________________

                    if($action != "login")
                    {
                    //____________________________________________________________________
                    //
                    // Unauthorisierter Zugriff => Login-Seite
                    //____________________________________________________________________

                    if(!session_is_registered("user"))
                    {
                    //echo "manual logout<br>";

                    session_unset();
                    session_destroy();

                    include("pages/login.form.php");

                    exit(0);
                    }

                    //________________________________________________________________________
                    //
                    // Authorisierter Zugriff =>
                    // automatischer Logout <timeout> Sekunden nach letztem Request
                    // oder Zeitpunkt des neuen letzten Request des Kunden in DB speichern
                    //________________________________________________________________________


                    if(session_is_registered("user"))
                    {
                    $query = "SELECT time_last_request FROM kunden";
                    $query.= " WHERE id='".$user->id."'";

                    $result = mysql_query($query);
                    $db_obj = mysql_fetch_object($result);

                    $time_last_request = $db_obj->time_last_request;

                    if($time_last_request != 0
                    && $time_last_request < time() - REQUEST_TIMEOUT)
                    {
                    //echo "auto logout<br>";

                    session_unset();
                    session_destroy();

                    $error = "Aus Sicherheitsgründen wurden Sie automatisch abgemeldet.<br>Bitte melden Sie sich aus Sicherheitsgründen erneut an.";

                    include("pages/login.form.php");

                    exit(0);
                    }

                    else
                    {
                    // neuen letzten Request-Zeitpunkt in DB schreiben

                    //echo "request at ".time()."<br>";

                    $kunde = new Kunde();
                    $kunde->read_db($user->id);

                    $kunde->time_last_request = time();

                    $kunde->update_db();
                    }
                    }
                    }


                    //________________________________________________________________________
                    //
                    // 'register_globals = On' simulieren und Formulardaten in String schreiben
                    //________________________________________________________________________

                    $form_vars= basename($PHP_SELF)."<br>";

                    if(isset($_GET['action']))
                    {
                    $form_vars_array =& $_GET;
                    }
                    else if(isset($_POST['action']))
                    {
                    $form_vars_array =& $_POST;
                    }

                    if(isset($form_vars_array))
                    {
                    foreach($form_vars_array as $var=>$val)
                    {
                    ${$var} = $val;

                    $form_vars .= $var." => ".$val."<br>";
                    }
                    }

                    $sess_vars = "";

                    foreach($_SESSION as $var=>$val)
                    {
                    $sess_vars .= $var." => ".$val."<br>";
                    }

                    $debug_vars = $form_vars."<br>".$sess_vars;

                    ?>

                    Kommentar


                    • #11
                      mich interessiert primär wie deine datenbank aussieht
                      welche tabellen hast du?
                      was speicherst du wo?
                      primärschlüssel?
                      ...?

                      als zweites kommen dann die sql-anfragen

                      kannst mir auch, wenn du willst, die daten zu deinem phpmyadmin geben
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Original geschrieben von mrhappiness
                        *grml*
                        OffTopic:
                        tralala gleich mal die url des motzer merken ...
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          Wie soll uns denn dieser Code nuetzen den du da gepostet hast?

                          Schreib mal hier den Query rein der eine 5-Minuten-Last erzeugt sowie die DB-Struktur der betroffenden Rows.

                          Benutzt ihr auch nur einen einzigen Join-Befehl in euren SQL-Abfragen? Da wohl Produktdaten über mehrere Tabellen verteilt sind und gegebenfalls oft querselektiert wird, sind fehlende Joins in solchen Angelegenheiten schonmal ein potentielles Problem.

                          kannst mir auch, wenn du willst, die daten zu deinem phpmyadmin geben
                          Da freut sich der Kunde sicher drüber...

                          Rocco

                          Kommentar


                          • #14
                            ok, dann poste mal eine abfrage, in der datenbank sind momentan 1,5 Millionen Einträge, Index habe ich schon einige probiert :-( . Die Abfrage dauert bis ca. 12 Sekunden) - 2 Sec. wären wünschenswert.


                            table structure:

                            id(primary key), id2, id3, name, kunden_id


                            query = SELECT COUNT(id) FROM artikel WHERE kunden_id='654'

                            gibt es an der abfrage noch etwas zu optimieren, oder gibt es eine schnellere trickreiche methode? die datenbank struktur ist leider nicht zu ändern.

                            danke für eure hinweise.

                            Kommentar


                            • #15
                              is auf kunden_id ein index gelegt?

                              is das wirklich ein string oder ein integer-wert?
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X