MySQL と PHP を使用して、実行に時間がかかりすぎる接続を閉じる (KILL) にはどうすればよいですか?
1402 次
1 に答える
3
解決策は、しばらくしてからすべての接続を強制終了するストアド プロシージャを作成することです。
DELIMITER //
DROP PROCEDURE IF EXISTS ClearDB//
CREATE PROCEDURE ClearDB()
BEGIN
DECLARE nID, bCursor INT;
DECLARE cursorQuery CURSOR FOR
SELECT ID
FROM information_schema.processlist
WHERE `TIME` > 10;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET bCursor = 1;
OPEN cursorQuery;
SET bCursor = 0;
WHILE bCursor = 0 DO
FETCH cursorQuery INTO nID;
KILL nID;
END WHILE;
CLOSE cursorQuery;
END //
DELIMITER ;
手順は非常に簡単です。TIME が 10 より大きいすべての接続 ID を取得し、結果をループして強制終了します。
また、ClearDB() プロシージャを呼び出す cron タスクを作成するか、次のように新しい接続を開くたびに呼び出すことができます。
$pDB = new mysqli('localhost', 'user', 'pass', 'database');
if ($pDB->connect_error)
{
// Handle the error
}
$pDB->query('CALL ClearDB()');
それが誰かを助けることを願っています:)
于 2012-11-27T09:16:40.610 に答える