SQL Abfrage Priorisieren

Hallo,

ich habe ein Problem,
ich habe eine Größeres PHP / SQL Statistikprojekt in dem eine SQL Datenbank ca 9 Stunden Lang mit SELECT / INSERT und UPDATE Querys befeuert wird insgesamt kommen über 500.000 SQL Querys zusammen.

Nun ist jedoch das Problem endstanden das diese Abfragen alle so in der Prime Time von 10-18 Uhr Ablaufen, und in der Zeit andere Projekte die auf dem Gleichen Webserver liegen und teilweise auch auf die SQL Datenbank zugreift nur mit einer Verzögerung von über 30 sekunden aufgerufen werden können.

Gibt es eine möglichkeit in dem PHP Script für die Querys Prioritäten anzugeben so das die Querys des Statistikscripts immer dann zurück gestellt wird wenn andere Querys offen sind ?

Hallo Phillip,

welche DB? Unter Oracle könnte man die Priorisierung mit Resourcen-Nutzungsgruppen vornehmen (eigener User, der viel Last generiert, wird einer niedrig-priorisierten Gruppe zugeordnet) …

gruss
bernhard

nein es geht um eine mysql datenbank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

wir wäre es denn damit, die „niedrig-zu-priorisierenden“ SQL-Queries in eine Queue zu schreiben, und diese Queue durch Cronjobs all 60 oder 120 min oder nachts abzuarbeiten?

Zwar ein hölzerner Weg, aber wenn es den Server merklich lahmlegt, würde er hiermit nur noch (2`?)stündlich „mal kurz“ lahmgelegt werden :smile:

Grüße, Hagen

geht leider nicht in der nacht,

das scipt startet jeden tag um 10 und muss um 0:00 fertig sein.
es darf aber auch net vor 8 Uhr starten… daher geht es nicht per cronjob in der nacht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wie wäre eine zweite Datenbank lediglich für die Schreibzugriffe, also zum Erstellen der Statistik?
Dann würden die Daten der Statistik aus der zweiten Datenbank heraus angezeigt werden.

Eine 2. DB könnte den Server um einiges entlasten, weil eine zweite Instanz parallel arbeitet und auch das interne File-Management von MySql so getrennt weniger Resourcen fressen würde (reine Vermutung)

Hallo Phillipp

ich bin gerade auf etwas gestoßen, da musste ich direkt an dich und deine Frage hier denken:

Die Lösung für dein Problem heisst INSERT DELAYED.

Speziell die niedrig priorisierten INSERT-Statements werden mittels DELAYED in eine Queue übertragen, und erst dann ausgeführt, wenn keine weiteren Threads auf die Tabelle zugreifen.

Weitere Infos findest du hier:
http://dev.mysql.com/doc/refman/4.1/en/insert-delaye…

Grüße, Hagen

Hallo Hagen,

besten dank für die antwort das war genau das was ich gesucht habe.

LG
Phillip

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]