auto_clean_history_messages开的情况下,是多久会清除一次配置的n天前数据

1445295683 3月前 422

每日凌晨吗还是怎样一个频率 如果消息记录历史存储太多 一次清太多会不会占很大的内存;

最新回复 (19)
  • HeavyRain 3月前
    引用 2
    一直一个频繁,大概5分钟清一次,部分占内存
  • 1445295683 14天前
    引用 3
    之前一直配置的30天,运营一段时间后改成了7天,那5分钟一次的清除任务会清除之前7天前的t_messages_*跟t_user_messages_*表数据吗
  • wfclaw 14天前
    引用 4
    是的,5分钟一次的清理任务会清除7天前的历史消息数据。
  • wfclaw 14天前
    引用 5
    **清理逻辑说明:**
  • wfclaw 14天前
    引用 6
    当 `auto_clean_history_messages` 开启时,服务端会启动一个定时清理任务,每隔5分钟执行一次。每次执行时,会根据 `history_messages_keep_days` 配置的值(你当前配置的是7天)来删除超出保留期限的消息。
  • wfclaw 14天前
    引用 7
    **具体清理范围:**
  • wfclaw 14天前
    引用 8
    - 会清理 `t_messages_*` 和 `t_user_messages_*` 表中超过7天的消息数据
  • wfclaw 14天前
    引用 9
    - 清理是分批进行的,采用分页删除策略,避免一次性删除大量数据造成数据库压力
  • wfclaw 14天前
    引用 10
    **注意事项:**
  • wfclaw 14天前
    引用 11
    从30天改为7天后:
  • wfclaw 14天前
    引用 12
    - 下一次清理任务执行时,会开始清理7天前的数据(即之前保留的8-30天的数据也会被逐步清理)
  • wfclaw 14天前
    引用 13
    - 这个过程是逐步完成的,不会一次性全部删除
  • wfclaw 14天前
    引用 14
    - 建议修改配置前确认是否需要先备份重要历史消息
  • wfclaw 14天前
    引用 15
    **验证方式:**
  • wfclaw 14天前
    引用 16
    可以通过查看数据库中 `t_messages_*` 表的数据量变化,或者观察服务端日志中是否有清理相关的输出来确认清理是否生效。
  • wfclaw 14天前
    引用 17
    是的,5分钟一次的清理任务会清除7天前的历史消息数据。

    当 auto_clean_history_messages 开启时,服务端会启动一个定时清理任务,每隔5分钟执行一次。每次执行时,会根据 history_messages_keep_days 配置的值(你当前配置的是7天)来删除超出保留期限的消息。

    具体清理范围:
    - 会清理 t_messages_* 和 t_user_messages_* 表中超过7天的消息数据
    - 清理是分批进行的,采用分页删除策略,避免一次性删除大量数据造成数据库压力

    注意事项:
    从30天改为7天后:
    - 下一次清理任务执行时,会开始清理7天前的数据(即之前保留的8-30天的数据也会被逐步清理)
    - 这个过程是逐步完成的,不会一次性全部删除
    - 建议修改配置前确认是否需要先备份重要历史消息

    验证方式:
    可以通过查看数据库中 t_messages_* 表的数据量变化,或者观察服务端日志中是否有清理相关的输出来确认清理是否生效。
  • 1445295683 14天前
    引用 18
    了解,目前数据量比较大 观察了大概半小时,看数据库文件(部署的linux服务器,im数据存储位置:/www/server/data/wfchat)并没变小 反正正常在增加。问下可以有地方查看清除数据日志记录吗,或者大数据情况下,每次执行大概能清理多少数据
  • wfclaw 14天前
    引用 19
    数据库文件大小没有明显变化是正常的,原因如下:

    1. 数据库文件空间回收机制
       - MySQL 等数据库删除数据后,磁盘文件不会立即收缩
       - 被删除的空间会标记为可重用,后续新数据会填充这些空间
       - 查看实际数据量变化应通过查询表记录数,而非文件大小

    2. 查看表数据量变化
    ```sql
    -- 查看消息表大致记录数
    SELECT COUNT(*) FROM t_messages_0;
    -- 或查看多个分表的总记录数
    ```

    3. 日志查看位置
       - 清理任务的日志通常输出到服务端标准日志
       - 如果部署的是标准服务,可查看日志文件或容器输出
       - 日志中搜索 "clean" 或 "history" 相关关键字

    4. 大数据量清理速度
       - 采用分页批量删除,每次清理一小批(通常几百到几千条)
       - 具体数量取决于系统配置和数据库性能
       - 对于大数据量,首次清理可能需要较长时间,会在多个5分钟周期内逐步完成

    建议通过监控表记录数变化来确认清理效果,而不是看文件大小。
  • HeavyRain 14天前
    引用 20
    可以查看一下 t_user_messages_0 表里最早一条记录的时间,是不是指定时间之内的记录
返回