0

MySQL と PHP を使用して、実行に時間がかかりすぎる接続を閉じる (KILL) にはどうすればよいですか?

4

1 に答える 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 に答える