MySQL max_user_connections
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
applikation
bekommen
besucher
code
datenbank
datum
dienst
eigene verbindung
einstellung
erzeugen
fehler
folgende fehlermeldung
host
kleine idee
laufen
limit
support
verbindung
zugriff
-
Hallo zusammen,
ich habe meine Seite bei uberspace gehostet und habe gestern folgende Fehlermeldung beim ausführen eines Cronjobs bekommen:
PHP Warning: mysqli::mysqli(): (HY000/1226): User '...' has exceeded the 'max_user_connections' resource (current value: 20) in ... on line 8
Fehler bei der Verbindung: User '...' has exceeded the 'max_user_connections' resource (current value: 20)
Die gleiche Fehlermeldung hatte ich vor 2 Monaten schon mal, als ich auf meiner Seite ein Event hatte und somit viele Leute gleichzeitig auf der Seite waren.
Ich habe den Support von uberspace angeschrieben und gefragt, was die Meldung genau zu bedeuten hat. Ich habe folgende Antwort bekommen:
Die Programme die für Deinen Account laufen haben insgesamt schon 20 Verbindungen zu MySQL-Dienst geöffnet und damit ist das Limit für Dich erreicht...
... Schau Dir am besten mal an was Deine Software da treibt und ob sie die MySQL-Verbindungen wieder sauber schließt.
Darauf habe ich gefragt, was genau er mit "20 Verbindungen" meint, also ob eine Verbindung ein Besucher ist. Dann hat er geantwortet:
Das heisst, dass die Applikation 20 parallele Datenbankverbindungen aufbauen kann, bevor das Limit an neuen Verbindungen erreicht ist. Wenn die Applikation tatsächlich für jeden Besucher eine eigene Verbindung herstellt, dann kannst du in der Tat davon ausgehen, dass 20 Besucher tatsächlich ausreichen, um weitere Besucher am Besuch der Seite zu hindern - vorausgesetzt, diese 20 Besucher führen zeitgleich Interaktionen aus, die einen Datenbankzugriff erzeugen. Im besten Fall sollte die Applikation mit persistenten Zugriffen arbeiten um über eine Verbindung möglichst viele Queries nacheinander abzusetzen.
Jetzt bin ich verwirrt, da ich vorher noch nie Probleme mit meiner Vorgehensweise hatte. Deswegen möchte ich hier fragen, was an meiner Vorgehensweise falsch ist bzw wie man es richtig macht.
Also bis jetzt hab ich es immer so gemacht, dass ich am Anfang von jeder Seite eine Verbindung zur Datenbank aufbaue. Also am Anfang von jeder Seite steht bei mir folgender Code:
$mysqli = new MySQLi("$host", "$benutzer", "$passwort", "$dbname"); if ($mysqli->connect_error) { echo "Fehler bei der Verbindung: " . mysqli_connect_error(); exit(); }
Im weiteren Verlauf werden dann normal die Abfragen durchgeführt. Wie es aussieht wird also wirklich für jeden Besucher eine Verbindung zur Datenbank aufgebaut. Also wäre das Limit bei 20 Besuchern schon erreicht. Aber wie macht man das denn anders? Ich habe es noch nie anders gemacht, geschweige denn von einer anderen Variante gehört^^ Und was meint der Support mit persistenten Zugriffen und wie genau setzt man das in PHP um?
Ich würde mich sehr über Hilfe freuen. Danke auf jeden Fall schonmal an alle die sich zeit genommen haben um das zu lesen ;)
Viele Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
kleine idee:
schreibe doch eine funktion, bei der alles schon drin ist, also:
-verbindungsaufbau
-query absetzung
-verbindung schließen
als eingabe kommt dann tabelle, query und evt datenbank
als ausgabe dann halt der rückgabe wert
so hast du vieleicht einen größeren spielraum, auch wenn das Laden der Seite minimal länger dauert
ich weiß, es ist nicht perfekt, aber ich hoffe, dass es nicht *dumm* gedacht von mir war
Beitrag zuletzt geändert: 28.8.2014 20:42:43 von matthias-detsch -
Beende doch die Verbindung am Seitenende wieder.
mysqli_close();
LG Marco
Beitrag zuletzt geändert: 28.8.2014 21:05:32 von aff3m1tw4ff3 -
Ja das mit dem beenden hab ich auch schon überlegt. Aber ich weiß nicht ob das was bringt, da die Verbindung ja normalerweise am Ende sowieso beendet wird.
Also ich denke es geht jetzt erstmal darum: Persistente Verbindung benutzen oder nicht? Ich hab mich jetzt schlau gemacht was das ist. Aber ich bin mir noch nicht sicher ob ich es machen soll und ich weiß auch noch nicht wie^^
Also ich hab halt 10 Cronjobs am laufen die Daten aus verschiedenen APIs suchen und in einer Datenbank speichern. Diese Daten kann man sich dann halt auf meiner Seite anzeigen lassen. Also es gibt auf jeden Fall sehr viele Verbindungen zur Datenbank.
Was meinen jetzt die Experten? Soll ich das mit der persistenten Verbindung machen?
EDIT: Falls ja, kann mir jemand erklären wie man persistente Verbindungen aufbaut? Hab bis jetzt noch nichts gefunden.
Beitrag zuletzt geändert: 28.8.2014 21:37:55 von ultimate-bravery -
Du könntest beim Hoster anfragen, ob sie das Limit in letzter Zeit geändert haben und ob sie das etwas hochsetzten können, da das eine Einstellungen/Einschränkungen von Hosterseite ist.
Oder wie du schaust, ob die die Anzahl der DB Verbindungen deinerseits verringern kannst. 10 Cronjobs ist schon eine Menge. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage