44 lines
2.0 KiB
SQL
44 lines
2.0 KiB
SQL
-- -----------------------------------------------------------------------------
|
|
-- Procedure to delete records in TKO database older than 180 days.
|
|
-- -----------------------------------------------------------------------------
|
|
DELIMITER $$
|
|
CREATE PROCEDURE remove_old_tests_sp()
|
|
BEGIN
|
|
-- Delete tko_tests older than 180 days in batches of 5k. Wait for 5 seconds to
|
|
-- avoid database lock for too long.
|
|
SET @cutoff_date = DATE_SUB(CURDATE(),INTERVAL 180 DAY);
|
|
|
|
WHILE EXISTS (SELECT test_idx FROM tko_tests WHERE started_time < @cutoff_date LIMIT 1) DO
|
|
BEGIN
|
|
SELECT concat("Deleting 5k records in tko_tests older than ", @cutoff_date);
|
|
DELETE FROM tko_tests WHERE started_time < @cutoff_date LIMIT 5000;
|
|
SELECT SLEEP(5);
|
|
END;
|
|
END WHILE;
|
|
|
|
-- Some tests may have started_time being NULL, but with finished_time set.
|
|
-- Deletion for these records is done in a different while loop to make the
|
|
-- query go faster as finished_time is not indexed.
|
|
WHILE EXISTS (SELECT test_idx FROM tko_tests where started_time IS NULL and finished_time < @cutoff_date LIMIT 1) DO
|
|
BEGIN
|
|
SELECT concat("Deleting 5k records in tko_tests with finished time older than ", @cutoff_date);
|
|
DELETE FROM tko_tests WHERE started_time IS NULL AND finished_time < @cutoff_date LIMIT 5000;
|
|
SELECT SLEEP(5);
|
|
END;
|
|
END WHILE;
|
|
|
|
-- After tko_tests is cleaned up, we can start cleaning up tko_jobs, due to FK
|
|
-- constrain. Move the cutoff time to 5 days older as some tko_jobs records
|
|
-- may have later started_time comparing to tko_tests. Deleting these records
|
|
-- may lead to FK constrain violation.
|
|
SET @cutoff_date = DATE_SUB(@cutoff_date,INTERVAL 5 DAY);
|
|
WHILE EXISTS (SELECT job_idx FROM tko_jobs WHERE started_time < @cutoff_date LIMIT 1) DO
|
|
BEGIN
|
|
SELECT concat("Deleting 5k records in tko_jobs older than ", @cutoff_date);
|
|
DELETE FROM tko_jobs WHERE started_tim < @cutoff_date LIMIT 5000;
|
|
SELECT SLEEP(5);
|
|
END;
|
|
END WHILE;
|
|
END;$$
|
|
DELIMITER ;
|