Skip to content

Commit

Permalink
mysql: Optimzie update of stats_{wait,run,idle}_sec
Browse files Browse the repository at this point in the history
  • Loading branch information
mariux committed Aug 18, 2015
1 parent 6c38efe commit 3d7ab31
Showing 1 changed file with 45 additions and 67 deletions.
112 changes: 45 additions & 67 deletions mysql/fix_stats_runwaitidle_sec.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,34 @@

-- do not touch active jobs

DROP TEMPORARY TABLE IF EXISTS mytemp;
DROP TEMPORARY TABLE IF EXISTS
mytemp;

SET @sinq=0,@srun=0,@gid=0,@dt=0,@ot=0;
SET
@sinq=0,
@srun=0,
@gid=0,
@dt=0,
@ot=0
;

CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS
CREATE TEMPORARY TABLE IF NOT EXISTS
mytemp
AS
(
SELECT
group_id,
MAX(IF(last = "run", dtime, 0)) AS run,
MAX(IF(last = "wait", dtime, 0)) AS wait,
MAX(IF(last = "idle", dtime, 0)) AS idle,
MAX(date_end) AS date_end,
group_date_end,
stats_run_sec,
stats_wait_sec,
stats_idle_sec
MAX(date_end) AS date_end
FROM
(
SELECT
gidchange,
group_id,
time,
sinq,
srun,
phase,
last,
SUM(dt) AS dtime,
MAX(date_end) AS date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
MAX(date_end) AS date_end
FROM
(
SELECT
Expand Down Expand Up @@ -65,23 +61,15 @@ CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS
time - @ot
) AS dt,
@ot := time,
date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
date_end
FROM
(
SELECT
group_id,
time,
SUM(dinq) as sdinq,
SUM(drun) as sdrun,
MAX(date_end) AS date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
MAX(date_end) AS date_end
FROM
(
(
Expand All @@ -92,16 +80,9 @@ CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS
1 AS event,
1 AS dinq,
0 AS drun,
date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
date_end
FROM
mxq_job,
mxq_group
WHERE
mxq_job.group_id = mxq_group.group_id
mxq_job
)
UNION ALL
(
Expand All @@ -112,17 +93,11 @@ CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS
2,
-1,
1,
date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
date_end
FROM
mxq_job,
mxq_group
mxq_job
WHERE
mxq_job.group_id = mxq_group.group_id
AND date_start > 0
date_start > 0
)
UNION ALL
(
Expand All @@ -133,35 +108,33 @@ CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS
3,
0,
-1,
date_end,
group_date_end,
stats_wait_sec,
stats_run_sec,
stats_idle_sec
date_end
FROM
mxq_job,
mxq_group
mxq_job
WHERE
mxq_job.group_id = mxq_group.group_id
AND date_end > 0
date_end > 0
)
ORDER BY
group_id,
time,
event
) AS S1
GROUP BY
group_id, time
group_id,
time
ORDER BY
group_id, time
group_id,
time
) AS S2
) AS S3
WHERE
last != "new"
last != "new"
GROUP BY
group_id, last
group_id,
last
ORDER BY
group_id, last
group_id,
last
) AS S4
GROUP BY
group_id
Expand All @@ -170,16 +143,21 @@ CREATE TEMPORARY TABLE IF NOT EXISTS mytemp AS

SET @sinq=0,@srun=0,@gid=0,@dt=0,@ot=0;

UPDATE mxq_group AS g
LEFT JOIN mytemp AS t
ON g.group_id = t.group_id
UPDATE
mxq_group AS g
LEFT JOIN
mytemp AS t
ON
g.group_id = t.group_id
SET
g.stats_wait_sec = wait,
g.stats_run_sec = run,
g.stats_idle_sec = idle
WHERE t.group_id
AND t.group_date_end
AND g.group_date_end
WHERE
t.group_id
AND
g.group_date_end
;

DROP TEMPORARY TABLE IF EXISTS mytemp;
DROP TEMPORARY TABLE IF EXISTS
mytemp;

0 comments on commit 3d7ab31

Please sign in to comment.