Jörg Reinholz: mysqli::query(): Couldn't fetch mysqli

Beitrag lesen

Moin!

Und ich wundere mich, weil ich als "fortgeschrittener laie" nicht verstehe warum den computern heutzutage noch grenzen gesetzt werden.

Weil die Technik eben Grenzen setzt. Überschallgeschwindigkeit auf Rädern geht nur mit sehr speziellen Material und auf sehr speziellen Strecken. Da nützt Dir der 1000-PS-Bolide auch auf deutschen Autobahnen nichts. MySQL ist für den Mehrbenutzerbetrieb vorgesehen, und deshalb steht auch der Bekloppte mit dem 1000-PS-Boliden am Montag morgen vor Frankfurt im Stau und muss sich an Regeln und Limits halten.

(Inform von maximal 30.000 Datenbankverbindungen)

Der Grund ist einfach. MySQL lauscht zwar (wenn nicht verbogen) auf Port 3306 aber jeder Client braucht für die Kommunikation auch einen Port. Zudem werden diese vom OS angefordert und vom OS verwaltet, also vergeben und wieder entzogen. Und deren Anzahl ist eben auf 2^16=65536 begrenzt und das OS gibt davon nur die Hälfte (2^15) dynamisch für die Benutzer frei. Das ist ein BASTA! Du kannst Dir aber gern selbst ein OS mit einem völlig eigenen Netzwerk schreiben.

Durch die Transaction die ich starte und dann wieder beende und wie ich nach mehreren Tests festgestellt habe nach rund 1.100.000 ausgeführten querys )

Da haben wir es gleich nochmal: Du verlangst zu viel. Die Transaktionen erfordern nämlich auch Speicher und Rechenleistung. Die Normalkonfiguration ist so, dass MySQL auf ganz normalen Rechnern mit ganz normaler Hardware auch bei einer beachtlichen Anzahl von Benutzern noch sehr gut funktioniert, also in vertretbarer Zeit Antworten liefert.

Wenn es Dein eigener Server ist und wenn Du diesen für einen speziellen Anwendungszweck vorgesehen und mit der erforderlichen Hardware ausgerüstet, für Kühlung gesorgt hast und eine genügend hohe Stromrechnung budgetiert hast, dann kannst Du gerne im Handbuch Deiner Version nachlesen, wie Du die Limits selbst setzen kannst.

Und da kommen wir zum nächsten Punkt:

Warum machst Du sowas unter PHP? Für sowas gibt es zur Not den Standard-MySQL Client, dem man per Pipe einen Datenstrom reinschiebt echo datenstrom | mysql […] oder aber eine Datei lesen lasst mysql […] < datei. Und wenn Du mit den Netzwerk-Limits nicht leben kannst, dann schieb die Daten als Datei auf den Server und kippe diese dann über eine Socketverbindung, also via localhost in den Server.

Aber auch dann wirst Du darauf achten müssen, dass Transaktionen Speicher brauchen, also begrenzt sind, also dass das System auf Deine sehr speziellen Aufgaben vorbereitet ist.

Jörg Reinholz