Ich versuche, die wait_timeout
MySQL-Einstellung zu testen, die ignoriert zu werden scheint.MySQL "wait_timeout" wird für lange Abfrage nicht berücksichtigt?
PHP-Skript:
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$sql = mysqli_connect('localhost','root','root','mysql');
$query = "SHOW VARIABLES WHERE Variable_name='wait_timeout';";
$result = $sql->query($query) or die($query.'<br />'.$sql->error);
$row = $result->fetch_object();
echo "wait_timeout = " . $row->Value . "<br/>\n";
$time_start = microtime_float();
$query = "SELECT SLEEP(2) FROM mysql.user;";
$sql->query($query) or die($query.'<br />'.$sql->error);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Query completed in $time seconds<br/>\n";
echo "You got the page";
Script Ausgabe:
wait_timeout = 2
Query completed in 8.0005459785461 seconds
You got the page
Meine Konfiguration
mariadb-server-5.3.5
php5.3.6
Was muss ich tun, um MySQL dazu zu zwingen, nach einer gewissen Zeit Abfragen abzubrechen?
Sowohl "wait_timeout" als auch "interactive_timeout" ist die Zeit der Inaktivität, bevor die Verbindung unterbrochen wird. Daher muss die Verbindung inaktiv sein (keine Abfrage ausführen), bevor sie gelöscht wird. MySQL SLEEP() zählt nicht, da Sie eine Abfrage ausführen. Sie müssen lange laufende Abfragen manuell beenden. Sie können dies skripten. –
Ich denke, Sie versuchen, wait_timeout falsch zu verwenden. wait_timeout und interactive_timeout sind nicht für die Abfragedauer, wenn ich mich richtig erinnere. Sie sind für inaktive Verbindungen, nicht für langsame Abfragen oder die SLEEP-Abfrage, die Verbindung ist immer noch in Ordnung und aktiv ... –