MySQLi - Verbindung speichern

Hallo zusammen,

ist es möglich, eine MySQL-Verbindung beim Start des IPS-Servers zu erstellen und dann zu halten, damit man nicht in jedem Script ein connect/close durchführen muss ?
Mein MySQL-Server läuft wie der IPS-Server unter SBS 2011.
Ich habe den Effekt, dass die SQL-Zugriffe hin und wieder dazu führen, dass ein Script die 30 Sekunden-grenze überschreitet (ca. bei 5% der Zugriffe - alle über dasselbe Script). Ich habe die Hoffnung, dass ich das beheben könnte, wenn nicht jedes Mal ein Connect durchgeführt würde. Dazu müüste man aber global die $link-Variable vom Connect zu Verfügung haben. Habe schon überall herumgesucht, aber keine Lösung gefunden.

Setz einfach die Laufzeitbegrenzung etwas höher:

ini_set( 'max_execution_time', 60);

hm - das verhindert zwar die Fehlermeldung, aber nicht den Hänger im IPS … normalerweise liegt die Laufzeit des Scripts bei 28ms …

Naja, das sorgt dafür, dass dein Script nicht abgeschossen wird und bis zum Ende läuft

Wenn es dir manchmal zu lange dauert, da musst du den Fehler suchen ;).

Unterschiedliche Verarbeitungsmengen? DB nicht verfügbar? Server ausgelastet? Fehler im Script in bestimmten Fällen? …?

Der Timeout passiert immer beim Connect - daher ja mein Ansinnen, nur ein Connect durchzuführen, aber bei den Queries benötigt man die Variable $link, über die die Verbindung gehalten wird.

$link = mysqli_connect($mySQLHost, $username, $password, $db);

Die Frage ist, ob man diese in einer IPS-Variable ablegen kann und sie damit konstant zu Verfügung hat.

$mySQLHost als IP probiert, um zumindest DNS auszuschließen?

ja - ist über IP

hm - hat keiner eine Idee ? Ich habe das ganze mal etwas verfolgt und festgestellt, dass etwa 98% der SQL-Aufrufe problemlos funktioniert. Bei den Abbrüchen kann ich im SQL-Log nichts finden. Ich habe das ganze etwas umgebaut :


<? 

$link = mysqli_init();
if (!$link) {
    die('mysqli_init failed');
}

echo 'Init OK'. "
";

if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
    die('Setting MYSQLI_INIT_COMMAND failed');
}

echo 'AUTOCOMMIT OK'. "
";

if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
    die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

echo 'Options OK'. "
";

if (!mysqli_real_connect($link, $mySQLHost, $username, $password , $db)) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

echo 'Success... ' . mysqli_get_host_info($link) . "
";

mysqli_close($link);
?>

Der Hänger kommt immer beim connect - die Timeout-Einstellung bewirkt leider nichts. Wäre es evtl. noch möglich, dass der Zugriff nicht klappt, wenn das Script z.B. zweimal parallel läuft ?

Ich bin ja sicher nicht der einzige, der MySQL nutzt …

…die Theorie mit dem parallel laufen hat sich erledigt … habe das mal testweise sicher separat laufen gelassen und hatte folgendes Ergebnis :

Init OK
AUTOCOMMIT OK
Options OK

Fatal error: Maximum execution time of 30 seconds exceeded in [ Test\dbConnect\dbConnect Dummy] on line 27
Abort Processing during Fatal-Error: Maximum execution time of 30 seconds exceeded
Error in Script C:\Program Files\IP-Symcon\scripts\51004.ips.php on Line 27

…und direkt danach :

Init OK
AUTOCOMMIT OK
Options OK
Success… XXX.XXX.XXX.XXX via TCP/IP