Skip to content

Commit b25f36e

Browse files
committed
Update.
1 parent 8cfb170 commit b25f36e

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

db/badger_init.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,9 @@ func startBadgerDBMaintenanceTasks() {
316316
for {
317317
select {
318318
case <-ticker.C:
319-
// 清理30天前的监控历史记录
319+
// 清理7天前的监控历史记录,减少数据库大小
320320
monitorHistoryOps := NewMonitorHistoryOps(DB)
321-
count, err := monitorHistoryOps.CleanupOldMonitorHistories(30 * 24 * time.Hour)
321+
count, err := monitorHistoryOps.CleanupOldMonitorHistories(7 * 24 * time.Hour)
322322
if err != nil {
323323
log.Printf("清理过期监控历史记录失败: %v", err)
324324
} else if count > 0 {

service/singleton/crontask.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ func InitCronTask() {
2323
Crons = make(map[uint64]*model.Cron)
2424

2525
// 添加基础的系统定时任务 - 修复重复任务注册问题
26-
// 每天凌晨3点清理30天前的数据
26+
// 每天凌晨3点清理累计流量数据(已废弃,保留为空函数)
2727
if _, err := Cron.AddFunc("0 0 3 * * *", func() {
28-
CleanCumulativeTransferData(30)
28+
CleanCumulativeTransferData(7) // 改为7天,保持与监控历史一致
2929
}); err != nil {
3030
panic(err)
3131
}
3232

33-
// 每天的3:30 对 监控记录 和 流量记录 进行清理
33+
// 每天的3:30 对 监控记录 和 流量记录 进行清理(7天前数据)
3434
if _, err := Cron.AddFunc("0 30 3 * * *", func() {
3535
count, err := CleanMonitorHistory() // 处理返回值
3636
if err != nil {

service/singleton/singleton.go

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)