1

イベント スケジューラ内のスリープ状態のスレッドを強制終了する手順があります。正常に動作しますが、行が処理されていない、データがフェッチされていない、行がフェッチされていない(エラー番号1329)、不明なスレッド(エラー番号1904)などの警告がスローされることがあります。コードで処理していますが。カーソルがすべての ID をフェッチした後の 1904 エラーの場合、一部のスレッドの処理中に欠落している可能性があるため、そのエラーがスローされます。MYSQL DB を使用しています

CREATE  PROCEDURE `kill_thread`()
BEGIN
DECLARE no_more_rows BOOLEAN;
DECLARE loop_cntr INT DEFAULT 0;
DECLARE num_rows INT DEFAULT 0;
DECLARE XID bigint(4);  
DECLARE Sleep_Cur CURSOR FOR
SELECT ID
  FROM information_schema.PROCESSLIST P
WHERE P.COMMAND='Sleep' AND P.TIME >20;

DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_rows = TRUE;

OPEN Sleep_Cur;
select FOUND_ROWS() into num_rows;
the_loop: LOOP

FETCH Sleep_Cur
INTO XID;

IF no_more_rows THEN
    CLOSE Sleep_Cur;
    LEAVE the_loop;
END IF;

SET @slp_sql= CONCAT("KILL ",XID);
PREPARE stmt FROM @slp_sql;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;
SET loop_cntr = loop_cntr + 1;
END LOOP the_loop;

END

ログファイルに記録されているため、コードの可能な修正を提案してください。ありがとう

4

0 に答える 0