嗯,犯了一个很低级的错误,最近暴露出来了。
背景:
1. 内部平台,接口间断性无返回,查询日志注意到失败时,接口耗时达到4000+(正常状态:100+ms)
2. 增加日志打点,在关键步骤插入时间戳,发现单步insert 和 select操作耗时1000ms+
3. 查看数据库表数据,查询表数据量已积累到400w+,每天新增数据4W+,在字符串上建立了索引(之前埋下的很傻行为,无想法的加了索引,功能实现未考虑性能)
解决:
1. 考虑了数据的必要性,增加事件定期删除过期数据
1. 查看事件开关并开启
SHOW VARIABLESLIKE 'event_scheduler';set global event_scheduler = on
2. 具体执行需要调用的存储过程,删除数据
DELIMITER//
CREATE PROCEDURE delete_data_n_day_ago(IN n int)BEGIN
delete from test_record where time < date_sub(curdate(), INTERVAL n day) ;END
//DELIMITER ;3. 写事件,调用存储过程CREATEEVENT del_dataON SCHEDULE EVERY 1 DAY
ONCOMPLETION PRESERVE
DO CALL delete_data_n_day_ago (3);
附:事件标准语法
CREATE
[DEF