@@ -702,7 +702,7 @@ func CleanMonitorHistory() (int64, error) {
702702 if db .DB != nil {
703703 // 使用BadgerDB的MonitorHistoryOps清理过期数据
704704 monitorOps := db .NewMonitorHistoryOps (db .DB )
705- maxAge := 60 * 24 * time .Hour // 60天
705+ maxAge := 7 * 24 * time .Hour // 修改为7天,减少数据库大小
706706 count , err := monitorOps .CleanupOldMonitorHistories (maxAge )
707707 if err != nil {
708708 log .Printf ("BadgerDB监控历史清理失败: %v" , err )
@@ -743,11 +743,11 @@ func CleanMonitorHistory() (int64, error) {
743743 err := executeWithoutLock (func () error {
744744 batchSize := 25 // 增加批次大小到25(从20增加)
745745 maxRetries := 3 // 减少重试次数,更快失败
746- cutoffDate := time .Now ().AddDate (0 , 0 , - 60 ) // 延长到60天,避免误删除有效历史数据
746+ cutoffDate := time .Now ().AddDate (0 , 0 , - 7 ) // 修改为7天,减少数据库大小和内存占用
747747 safetyBuffer := time .Now ().Add (- 6 * time .Hour ) // 添加6小时安全缓冲区,避免误删新数据
748748
749749 // 使用非事务方式分批清理,避免长时间事务锁定
750- // 清理60天前的监控记录 ,并确保不删除最近6小时的数据
750+ // 清理7天前的监控记录 ,并确保不删除最近6小时的数据
751751 for {
752752 var count int64
753753 var err error
@@ -884,6 +884,38 @@ func CleanMonitorHistory() (int64, error) {
884884 break
885885 }
886886
887+ // 清理7天前的流量记录
888+ for retry := 0 ; retry < maxRetries ; retry ++ {
889+ // 等待确保没有其他操作在进行
890+ time .Sleep (time .Duration (retry * 100 ) * time .Millisecond )
891+
892+ if DB == nil {
893+ return fmt .Errorf ("数据库未初始化" )
894+ }
895+ result := DB .Exec ("DELETE FROM transfers WHERE created_at < ?" , cutoffDate )
896+
897+ if result .Error != nil {
898+ err := result .Error
899+
900+ if strings .Contains (err .Error (), "database is locked" ) ||
901+ strings .Contains (err .Error (), "SQL statements in progress" ) ||
902+ strings .Contains (err .Error (), "cannot commit" ) {
903+ if retry < maxRetries - 1 {
904+ backoffDelay := time .Duration ((retry + 1 )* 1000 ) * time .Millisecond
905+ log .Printf ("数据库忙碌,%v 后重试历史流量记录清理 (%d/%d)" , backoffDelay , retry + 1 , maxRetries )
906+ time .Sleep (backoffDelay )
907+ continue
908+ }
909+ }
910+
911+ log .Printf ("清理历史流量记录失败: %v" , err )
912+ return err
913+ }
914+
915+ totalCleaned += result .RowsAffected
916+ break
917+ }
918+
887919 if totalCleaned > 0 {
888920 log .Printf ("历史数据清理完成,共清理 %d 条记录" , totalCleaned )
889921 }
0 commit comments