背景;性能测试稳定性测试场景,需要定时对数据库缓存表进行清理,否则造成表空间不足和磁盘空间不足导致交易异常停止,影响测试;
目的:定时执行RUNCATE语句,清空表内容;
方法:通过MySQL 的事件调度器(Event Scheduler)来实现
操作步骤:
1. 确保事件调度器开启
首先检查并开启 MySQL 的事件调度器(默认可能关闭):
-- 查看事件调度器状态(ON表示开启,OFF表示关闭)
SHOW VARIABLES LIKE 'event_scheduler';
-- 如果未开启,执行以下语句开启(需要管理员权限)
SET GLOBAL event_scheduler = ON;
2. 创建定时任务(事件)
执行以下 SQL 创建一个每 1 小时执行一次的事件,用于清空指定表数据:
-- 创建事件(如果已存在则先删除)
DROP EVENT IF EXISTS truncate_ieai_tables_hourly;DELIMITER $$CREATE EVENT truncate_ieai_tables_hourly
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP -- 从当前时间开始执行
DO
BEGIN-- 执行清空表的SQL(按顺序执行)TRUNCATE TABLE ieai_workflowinstance;TRUNCATE TABLE IEAI_ACTSTATEDATA;TRUNCATE TABLE IEAI_REQUESTSTATEDATA;TRUNCATE TABLE ieai_execact;TRUNCATE TABLE ieai_run_instance;TRUNCATE TABLE ieai_run_instance_his;TRUNCATE TABLE ieai_runinfo_instance;TRUNCATE TABLE ieai_runinfo_instance_his;TRUNCATE TABLE ieai_blob;TRUNCATE TABLE ieai_actruntime;TRUNCATE TABLE ieai_actruninfo;TRUNCATE TABLE ieai_biz_unique;TRUNCATE TABLE ieai_callworkflow_info;TRUNCATE TABLE ieai_shellcmd_output;TRUNCATE TABLE ieai_remoteexecact;TRUNCATE TABLE ieai_runinfo_step_succeed;TRUNCATE TABLE ieai_runinfo_instance_param;TRUNCATE TABLE ieai_runinfo_instance_param_his;TRUNCATE TABLE ieai_errortask;TRUNCATE TABLE ieai_iexecerror;TRUNCATE TABLE ieai_flowenv;DELETE FROM ieai_acttimeconfig;
END$$
说明:
- 执行频率:
EVERY 1 HOUR
表示每 1 小时执行一次。 - 启动时间:
STARTS CURRENT_TIMESTAMP
表示从创建事件的当前时间开始,首次执行后每隔 1 小时再次执行 - 权限:创建事件需要
EVENT
权限,执行TRUNCATE
和DELETE
需要对应表的权限。 - 查看事件:可通过
SHOW EVENTS;
查看已创建的事件。 - 关闭 / 启用事件:若需临时关闭,可执行
ALTER EVENT truncate_ieai_tables_hourly DISABLE;
,启用则替换为ENABLE
。