DROP PROCEDURE IF EXISTS setBid;
CREATE PROCEDURE setBid(IN auction_id INT(10))
BEGIN
DECLARE done,done1 INT DEFAULT 0;
DECLARE u_id INT(20);
DECLARE g_id INT(10);
DECLARE good_id INT(10);
DECLARE users_id INT(10);
DECLARE good_cur CURSOR FOR SELECT goods_id FROM ecs_pmgoods WHERE auction_id = auction_id ;
DECLARE user_cur CURSOR FOR SELECT user_id FROM ecs_users WHERE user_rank !=2; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN good_cur;
REPEAT
FETCH good_cur INTO g_id;
IF NOT done THEN
SET good_id = g_id;
DELETE FROM ecs_bidder WHERE goods_id = good_id;

BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = 1; OPEN user_cur;

REPEAT
FETCH user_cur INTO u_id;
IF not done1 THEN
SET users_id = u_id;
SELECT users_id;
INSERT INTO ecs_bidder (user_id,goods_id,bidding_paddle,deposit,is_priority,add_time,is_proxy,proxy_price,proxy_time)
VALUES(users_id,good_id,users_id,5000,0,(SELECT UNIX_TIMESTAMP()),0,0,0);
END IF;
UNTIL done1 END REPEAT;
SET done1=0;
CLOSE user_cur;
END;
END IF;

UNTIL done END REPEAT;
CLOSE good_cur;

END;CALL setBid(240);执行完后发现CPU 飙升,当执行完成后CPU 也降不下来

解决方案 »

  1.   

    没细看你的代码,但你这种情况并非不正常。执行的时候 CPU肯定高。
     执行完后,MYSQL仍需要进行记录的写稿,日志的更新等 等,CPU会再忙一会。但不会太长。除非有其它进程又开始CPU的占用。
      

  2.   

    mysql每秒都在做刷新日志,合并插入,刷新脏数据到磁盘
    当压力大的时候这些事情自然被拖延
      

  3.   

    我认为MYSQL应该有优化的版本,怎么把资源全用上是个问题