Ankündigung

Einklappen
Keine Ankündigung bisher.

Gönn' dem Server eine Pause / DoEvents

Einklappen

Neue Werbung 2019

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

  • Gönn' dem Server eine Pause / DoEvents

    Guten Tag.

    Ich habe eine Website, bei der ich öfters Datenbank-Reorganisations-Tools ablaufen lasse oder sonstwie durch meine Datenbank renne um irgendwelche Aktionen durchzuführen. (Alles per php-script).

    Wenn ein solches Script läuft, das sind dann schon mal 10 bis 30 Minuten, dann lahmt der Server erheblich.

    Ich suche eine Möglichkeit, dem Server per Funktion etwas Zeit zum Verschnaufen zu gönnen, damit Anforderungen von anderen Usern auch mal beantwortet werden können.

    Bei VB kann ma das sehr schön machen, indem man nach jedem bearbeiteten Datensatz die Funktion DoEvents aufruft, die dem Betriebssytsem etwas Luft für andere Aufgaben verschafft.

    Gibt es etwas Ähnliches für PHP?

    Vielen Dank ...

  • #2
    Re: Gönn' dem Server eine Pause / DoEvents

    Du hattest vergessen, das System zu beschreiben.
    Zitat von hvse
    Ich habe eine Website, bei der ich öfters Datenbank-Reorganisations-Tools ablaufen lasse oder sonstwie durch meine Datenbank renne um irgendwelche Aktionen durchzuführen. (Alles per php-script). Wenn ein solches Script läuft, das sind dann schon mal 10 bis 30 Minuten, dann lahmt der Server erheblich.
    a. wenn der Server "lahmt", dann fehlt ihm schlicht und einfach mehr RAM.
    b. sowas erledigt man in der Shell. Beispiel: In der Shell war der Import (SQL Strings) einer 130 MB dicken DB innerhalb von 3 sec. gegessen war.

    Kommentar


    • #3
      Ja, was mein Provider für ein System hat, kann ich auch nicht sagen. Wird wohl ein UNIX-System oder Linux sein.

      Auf die Shell habe ich keinen Zugriff, außerdem muss ich in Abhängigkeit von Informationen unterschiedliche Aktionen ausführen, muss das also per php-skript tun. Nur während das Skript läuft, schnappe ich mir sehr viele Resourcen, und da möchte ich in meinem Skript alle paar Sekunden dem Server sagen, dass auch andere mal seine Ressourcen benutzen dürfen ...

      Kommentar


      • #4
        Zitat von hvse
        Auf die Shell habe ich keinen Zugriff, außerdem muss ich in Abhängigkeit von Informationen unterschiedliche Aktionen ausführen, muss das also per php-skript tun.
        Dann ist das DB Konzept schlecht durchdacht, wenn eine Aktion "10 bis 30 Minuten" dauert.

        Kommentar


        • #5
          Naja, eigentlich ist es nicht eine Aktion, sondern es sind 4 Aktionen, und das für jeden der 1800 Datensätze (Statistische Auswertungten etc.)


          Daher bietet es sich auch gut an, nach jedem Datebsatz (also 1800 mal) einen bestimmten Befehl (und den suche ich) abzusetzen, der den Server auch 'mal 'was anderes machen lässt ...

          Kommentar


          • #6
            Was ist mit sleep() nach jedem Datensatz?

            http://de2.php.net/manual/de/function.sleep.php

            KMAssS

            Kommentar


            • #7
              Zitat von hvse
              Naja, eigentlich ist es nicht eine Aktion, sondern es sind 4 Aktionen, und das für jeden der 1800 Datensätze (Statistische Auswertungten etc.)
              Das läßt befürchten, daß Du das mit 1800 Querys erledigst.

              Daher bietet es sich auch gut an, nach jedem Datebsatz (also 1800 mal) einen bestimmten Befehl (und den suche ich) abzusetzen, der den Server auch 'mal 'was anderes machen lässt ...
              Dein Konzept ist schlecht. Nicht, weil Du kooperativ programmieren möchtest, sondern weil das Script 10-30 Minuten benötigt. Ich werde nämlich schon nervös, wenn mein Kram länger als 50 millisec dauert.

              Kommentar


              • #8
                Hi.

                Dein Konzept ist schlecht. Nicht, weil Du kooperativ programmieren möchtest, sondern weil das Script 10-30 Minuten benötigt. Ich werde nämlich schon nervös, wenn mein Kram länger als 50 millisec dauert
                Kann dir da nur zustimmen. Denn mal im Ernst - 1800 Datensätze für ne SQL-Datenbank sind eigentlich ein Witz! Und wenn ich mir dann noch vorstelle, was man mit den paar Daten in 30 Minuten alles machen kann - ohoh!

                Kann dir also auch nur wie mikel empfehlen, deinen SQL-Code zu prüfen, denn da kann beim besten Willen etwas nicht stimmen - selbst wenn du mit dem Argument kommst, dass jeder Datensatz aus 10 vollen "Longblob" - Feldern besteht ...

                Gruß

                Chris

                Kommentar


                • #9
                  Erstmal volle zustimmung!

                  Nur, Frage in den Fragesteller:
                  Wieso versuchst du mit Verschnaufspausen die Fehlerhafte Struckturirung zu vertuschen? Wie wäre es mit Umstruckturieren?

                  Aufforderung:
                  Erklär uns, was du da immer machst und wir können die eventuell sagen, wie man das mit weniger querys und weniger Resourcen lösen kann.

                  Warum gehst du jeden Datensatz einzeln durch? Wozu hat MySQL so viele Funktionen...schau dir das mal an!

                  Sollte man mit all diesen Funktionen keine besser Lösung finden, so hast du schlicht und ergreifend den Falschen Datenbanktyp gewählt, bzw...dich nicht richtig erkundigt!

                  wilko

                  Kommentar


                  • #10
                    Sprachauswahl / speichern / checken

                    Hi,

                    ups, jetzt hatte ich das falsche Fenster für mein eigenes Posting benutzt, hier als mein "RICHTIGER" Beitrag:

                    Ich finde es merkwürdig, daß dein Server für 4x1800 queries (= 7200) 10-30 MINUTEN braucht, das wäre ja PRO query 0,25 Sekunden...
                    Ich kenne die Datenbank nicht - ein SQL-Dump wäre sicherlich aufschlussreich, inkl. deiner "Funktionen" - aber das ist eindeutig zu lange!

                    Ich glaube es wäre jetzt sinnlos ins Blaue reinzuraten was du da machen lässt, und direkt eine Hilfestellung zu geben! Ich kann dir auch nur sagen, daß das viel zu lange dauert!!

                    Grüße,
                    LaLop

                    Kommentar


                    • #11
                      Hallo und vielen Dank für die Tips bislang. Dann will ich einmal kurz erklären, was ich eigentlich mach.

                      Also es geht um einen "Paidmailer". Der macht eigentlich nix anderes, als Emails zu verschicken. Da es sich um bezahlte Mails handelt, muss auch festgehalten werden, wer welches Mail bekommen hat, und wer welches Mail auch "bestätigt" hat. Ich muss also für ca. 2000 Mailempfänger in einer zusätzlichen Tabelle diese Infos festhalten.

                      Bei 2000 Empfängern und 10-20 Mails pro Tag, und einer Gültigkeit dieser Mails von 14 Tagen, sind dann mal locker 250.000 bis 500.000 Datensätze in dieser Tabelle.

                      Wenn ich jetzt Mails erstelle, dann muss praktisch für jeden dieser 2000 Empfänger ein Eintrag in diese Tabelle gemacht werden.

                      Damit nicht genug. Wie das bei solchen Programmen üblich ist, gibt es auch Geld für das Bestätigen dieser Mails. Und zwar nicht nur für den Empfänger dieser Mail, sondern auch für denjenigen, der den Empfänger empfohlen hat, und für dessen Empfehler und für dessen etc. Und das in theoretisch unbgrenzter Anzahl von Ebenen.

                      Also muss auch für diese Infos eine eigene Tabelle her, in der diese Infos gespeichert werden. Macht also nochmal pro User (im Durchschnitt) 3 - 10 Datensätze in einer zusätzlichen Tabelle, die da mit eingetragen werden. Also kommen pro Mail schonmal viele Tausend Datensätze ins System, die natürlich alle geschriben werden wollen.

                      Ich weiß, dass es auch anders ginge (ohne eigene Datensätze durch Abspeichern in BLOB-Feldern zum Beispiel, aber ich wollte ein System, welches flexibel ist. So bekommt man z. B. nur dann den "Empfehler-Bonus", wenn man selbst eine Mail bestätigt hat, und das geht am einfachsten über einzelne Datensätze. Jeder Datensatz hat dann zwei Spalten, eine für "selbst bestätigt" und eine für "Empfohlener bestätigt". Nur die Geldbeträge werden dann bei der "Verdienstübersicht" gezählt,bei denen in beiden Spalten ein "JA" steht.

                      So läuft eigentlich auch alles ganz stabil und recht flott (ausser auf dem Server laufen von anderen Sites gerade irgendwelche Sachen, die den Server ausbremsen). Nur wenn ich diese Mails eintrage, dann ist der Server halt aufgrund der vielen Datensätze, die er da schreiben muss, etwas langsam. Und deshalb wollte ich da ab und zu ein paar Pausen erzwingen.

                      Normalerweise ist das Ganze auch in 3 bis 5 Minuten erledigt, nur in "Schwächephasen" des Servers dauewrt es länger.

                      Bin jetzt auch dabei, das ganze von Cronjobs erledigen zu lassen, die das ganze langsamer (weil häppchenweise) dafür aber stetig und ressourcenschonender erledigen.

                      Hat dazu übrigens jemand einen guten Tipp für einen guten Cronjob-Anbieter?

                      DANKE

                      Kommentar


                      • #12
                        Hmmm... warum hüpft bei mir im Hintergrund so ein Männchen rum, was laufend schreit:

                        "Nimm Assoziative Arrays und Cache die Daten dort vor"...

                        Erinnert mich an ein Query für mein Spiel... nachdem ich das in einem Rutsch gelesen habe und die Updates in einem Rutsch rausschickte... mensch kann ein Script plötzlich schnell sein

                        Sprich... Überdenke deine jetzige Lösung nochmals und werfe sie im Ernstfall weg. Manchmal ist es leichter was neues zu machen, als auf dem alten aufzubauen.

                        Kommentar


                        • #13
                          Zitat von MrMarco
                          "Nimm Assoziative Arrays und Cache die Daten dort vor"...

                          Sprich... Überdenke deine jetzige Lösung nochmals und werfe sie im Ernstfall weg. Manchmal ist es leichter was neues zu machen, als auf dem alten aufzubauen.
                          Es gibt aber auch Leute, die manchmal leicht viel Blödsinn schreiben bevor sie das verwendete System überhaupt geschnallt haben
                          Ich kenne solche Systeme, daher weiss ich um die Komplexität, und neu schreiben hilft da evtl wenig weiter...

                          Aber der Marco hat schon Recht, am besten wäre, die Daten alle einzulesen, und dann via php im Speicher - nicht per mysql - die Sachen zu überprüfen.
                          Was MrMarco leider nicht berücksichtigt... 500.000 Datensätze in den Speicher ziehen kostet VIEL Ram, vermutlich ZUVIEL für den Server...
                          Ich schätze, der Provider hat das Speicherlimit bei 32MB belassen. und somit (vermutlich) zuwenig für ne halbe Million Datensätze!

                          Aber da muss ich auch sagen, wer eine solche Menge an Datensätzen zu verwalten hat, sollte nicht auf das 9,99€ Angebot vom Discounter setzen, sondern evtl für 50-100€ einen eigenen Server anmieten, wo man dann auch die vollen 256MB Ram (oder mehr) für PHP nutzen kann!!

                          Ich schieb primär erstmal deinem Hoster den schwarzen Peter zu, die Performance der Server ist evtl nicht dem deines Projektes benötigter entsprechend!! Denn Webspace mit PHP ist nicht gleich Webspace mit PHP!!

                          Den zweiten Schuh musst du dir anziehen! Wie schon gesagt, für wenig Geld kann man nicht viel Leistung erwarten... das versprechen zwar viele Provider - für den normaluser mit Forum und Mailer reichts ja auch!!! - aber wenn's hart auf hart kommt biste eben doch auf mehr Power angewiesen!!

                          Ich hoffe, ich hab dir geholfen...

                          Greetz,
                          LaLop

                          Kommentar


                          • #14
                            klasse

                            ich hab jetzt das zeug hier gelesen und irgendwie kann ich mir vorstellen das dem hier nicht wirklich weiter geholfen werden konnte , viele klugen kommentare aber keinen wirklich ausgereiften lösungsvorschlag ,(mit ausnahme vom cachen)

                            Kommentar


                            • #15
                              Re: klasse

                              Hi,

                              Zitat von rio
                              ich hab jetzt das zeug hier gelesen und irgendwie kann ich mir vorstellen das dem hier nicht wirklich weiter geholfen werden konnte , viele klugen kommentare aber keinen wirklich ausgereiften lösungsvorschlag ,(mit ausnahme vom cachen)
                              sehe ich anders...
                              Ich hab zugestimmt, daß das einlesen der DB in ein Array klug wäre, und das umsteigen auf Leistungsfähigere Hardware/Performance... mehrere Millionen Datensätze pro Tag (je nach der Anzahl der Durchläufe) durchsuchen, ersetzen, löschen etc sollt man nicht auf kleinen vHost-Visitenkarten - Angeboten laufen lassen!

                              Ich könnte noch vorschlagen, den ZendOptimizer zu installieren, aber das ist vermutlich schon passiert, oder der Hoster macht es nicht...

                              Andere Lösungen kannst du in diesem speziellen Fall IMHO nicht anbieten!!

                              Kommentar

                              Lädt...
                              X