Merhaba,
Kısa bir süre önce karşılaştığım bir MySQL Query Process problemi sonrası yazdığım bir kod blogunu sizinle paylaşıyorum.
Aşağıdaki kodlar ile 200ms’nin üzerinde işlem kuyruğunda bekleyen işlemleri sonlandırabilirsiniz. Lütfen, kodlarını çalıştırmadan önce sisteminizdeki loglama ve kurtarma modülleri varsa çalıştıklarını check ediniz.
<?php
/**
* Danger: KILL ALL MySQL SERVER PROCESS
* UYARI: Tüm veri tabanı işlemlerini sonlandıran kod blogu
* @author: Hakan DAMAR
*/
$dbhost = "10.70.1.9";
$dbname = "MySQLEnt";
$dbuser = "rootkit";
$dbpass = "**********";
@mysql_connect($dbhost,$dbuser,$dbpass) || die("Error:" .mysql_error());
mysql_select_db($dbname);
$T_Begin = mysql_query("BEGIN"); Require DB Engine Type = INNODB for transaction
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
for ($h=0;$row["Time"] > 200;$sql=mysql_query("KILL $process_id")) {
if(!$sql){ $T_ROLLBACK = mysql_query("ROLLBACK"); }
else {
$T_COMMIT = mysql_query("COMMIT");
print $process_id."<br>";
}
}
}
?>
Yukarıdaki kodlarda sadece processleri kill eden tarafa yoğunlaşınız. Çalışır bir örnek sunabilmek adına bazı tarafları express kodlanmıştır. Siz kendi yazılımınıza göre entegre kullanabilirsiniz.
İyi Çalışmalar,
Hakan DAMAR