MySQL 杀死休眠连接的函数

标签 mysql sql multithreading

我正在尝试创建将杀死所有休眠连接的函数:

    CREATE DEFINER=`user`@`%` FUNCTION `kill_sleepers`() RETURNS int(11)
BEGIN
    DECLARE Id, result INT;
    DECLARE done INT DEFAULT FALSE;
    DECLARE sleepers CURSOR FOR SELECT Id FROM INFORMATION_SCHEMA.processlist where COMMAND = 'Sleep';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    SET result = 0;
    OPEN sleepers;

    read_loop: LOOP
        FETCH sleepers INTO Id;
        IF done THEN
          LEAVE read_loop;
        END IF;
        kill Id;
            SET result = result + 1;
    END LOOP;

    CLOSE sleepers;    
    RETURN result;
END

但是当我运行它时,我收到“错误代码:1094。未知线程 ID:0”。如果我把杀戮放进:

IF Id != 0 THEN
    kill Id;
    SET result = result + 1;
END IF;

它不会杀死任何东西,我在哪里犯了错误?

最佳答案

DROP FUNCTION KILL_SLEEPERS;
DELIMITER $$
CREATE FUNCTION KILL_SLEEPERS()
    RETURNS INT READS SQL DATA
    BEGIN
        DECLARE DONE INT DEFAULT FALSE;
        DECLARE VAR_ID INT;
        DECLARE ITER INT;
        DECLARE SLEEPERS CURSOR FOR SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'SLEEP';
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = TRUE;
        SET ITER = 0;
        OPEN SLEEPERS;

        READ_LOOP: LOOP
            FETCH SLEEPERS INTO VAR_ID;
            IF DONE THEN
                LEAVE READ_LOOP;
            END IF;
              KILL VAR_ID;
            SET ITER = ITER + 1;
        END LOOP;
    CLOSE SLEEPERS;
    RETURN ITER;
END;
$$
DELIMITER ;

SELECT KILL_SLEEPERS();

只需尝试上面的代码。

我刚刚将变量名称从 ID 更改为 VAR_ID

关于MySQL 杀死休眠连接的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45975697/

相关文章:

java.security.AccessControlException : access denied (java. lang.RuntimePermission accessClassInPackage.sun.misc)

php - 按相关性进行 boolean 全文搜索顺序似乎不起作用

sql - 在 PostgreSQL 中,外键约束是否只需要 REFERENCES?

mysql - 如何让我的 Teradata 查询提示输入 ?YYYYMMDD AND ?YYYYMMDD 和 之间的日期

c# - 如何使用内存屏障?安全 Atomicity 操作的方法?

multithreading - 在 Scala 上创建线程本地对象

php - 为什么我无法从管理 View 更新帖子元?

MySQL WHERE 子句中整数的第一个数字

mysql - 为第 10 部门工资最低的员工增加 1% 的工资

c++ - 在带有 header 的类中创建 std::thread