mysql游标遍历,判断数据是否存在,存在则更新,不存在插入
生产环境使用sge调度系统,文档不多就自己写了监控的脚本,数据推入mysql。
现在需要记录任务运行过程中的内存使用生命周期,mysql已经可以抓到实时数据(表over_mem和 表compute_cpu_rss join的结果)。
现在需要在一个新的表 bb (jobid (primary) , c_rss)中记录内存生命周期。
实现方式为(借助游标,遍历实时数据。jobid存在,就往c_rss列contact追加;jobid不存在,就insert):

实现代码:
DROP PROCEDURE IF EXISTS init_reportUrl; CREATE PROCEDURE init_reportUrl () BEGIN DECLARE s INT DEFAULT 0; DECLARE report_id VARCHAR ( 255 ); DECLARE report_mem VARCHAR ( 256 ); DECLARE report CURSOR FOR SELECT over_mem.jobid, compute_cpu_rss.c_rss FROM over_mem INNER JOIN compute_cpu_rss ON over_mem.jobid = compute_cpu_rss.c_jobid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET s = 1; OPEN report; FETCH report INTO report_id, report_mem; WHILE s <> 1 DO INSERT INTO bb (jobid,c_rss) VALUES (report_id,report_mem) ON DUPLICATE KEY UPDATE c_rss = concat(c_rss,report_mem); FETCH report INTO report_id,report_mem; END WHILE; CLOSE report; END; CALL init_reportUrl ()

浙公网安备 33010602011771号