我注意到如果我使用mysql_query()執行長時間運行的mysql查詢(使用mysql_query()(我知道我不應該使用它),然後PHP進程會被殺死該查詢繼續在mysql服務器上運行。這不是一個持久的連接。連接而成,具有:mysql_query()在php退出後繼續運行
$db = mysql_connect($host, $login, $pass, false);
$sql = 'SELECT COUNT(*) FROM `huge_table`';
$result = mysql_query($sql, $db);
例如,假設我有1頁十億行的表和PHP程序做到這一點由於某種原因:
SELECT COUNT(*) FROM `huge_table`
然後超時(說是因爲我運行PHP-FPM與request_terminate_timeout = 5),所以5秒後殺死的過程,以確保它不會養豬的事情。
Eventhough過程中被殺死,查詢仍然在MySQL WAIT_TIMEOUT後運行甚至遠遠。
反正是有保證的是,如果PHP進程退出不管是什麼原因,它也殺死任何正在運行的查詢,它做?
我使用tokudb 38年5月5日 - tokudb-7.1.7-E這是MySQL的38年5月5日
[**在新的代碼,請不要使用'mysql_ *'功能**](HTTP:/ /bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。請參閱[**紅框**](http:// j。熔點/ Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – esqew
要添加上述評論,較新的客戶端庫(如PDO和* mysqli *)可能更好地處理退出過程。我至少會用* mysqli *重試你的嘗試,看看它是否有所作爲。 – Phil
我知道。這是舊代碼。我重新使用mysqli來運行一個測試,它具有相同的行爲,所以我不認爲它與使用mysql_query而不是mysqli_query – crickeys