Dify需配置日志轮转、会话自动清理、上下文截断及知识库/数据库定期维护:设LOG_FILE_MAX_SIZE=100MB、BACKUP_COUNT=10、LOG_TZ=Asia/Shanghai;启用会话TTL=24h与每小时清理;限制历史消息为15条并保留最新;用SDK或API批量删过期知识文档;低峰期执行VACUUM FULL与REINDEX瘦身数据库。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify运行日志不占满磁盘、数据库不因历史会话和知识库冗余数据拖慢响应,又不想每次手动查表删记录或写临时脚本清理。
配置Dify日志自动轮转与过期清理
进入Dify部署目录下的.env文件,用文本编辑器打开。
找到LOG_FILE_MAX_SIZE这一行,将其值改为100(单位MB),避免单个日志文件过大导致无法快速加载或归档失败。
将LOG_FILE_BACKUP_COUNT设为10,这样系统最多保留10个历史日志文件,超出后自动删除最旧的。
修改LOG_TZ为Asia/Shanghai,确保日志时间戳与本地运维时区一致,排查问题时不需换算。
【必须重启Dify服务才能使日志配置生效】执行docker-compose restart或对应进程管理命令,否则新参数不会载入。
启用会话自动过期清理机制
登录Dify后台管理界面 → 点击左侧「Settings」→ 选择「Application Settings」→ 滚动到「Session Management」区域。
开启「Enable Auto Cleanup」开关,填写两个关键参数:
— ttl_hours:设为24,表示用户会话空闲满24小时即被判定为过期;
— cleanup_interval:设为1h,系统每小时扫描一次数据库,及时释放空间。
保存后无需额外操作,Dify将在后台持续执行清理,不依赖外部定时任务。
开启上下文智能截断防爆token
仍在同一「Session Management」设置页中,勾选「Enable Context Truncation」。
设置「Max History Messages」为15,这个数值足够维持多轮对话语义连贯,又不会让单次请求携带过多历史消息导致模型报错。
务必开启「Preserve Latest Only」,它保证每次新消息写入前,系统只保留最新的15条user+assistant对,自动丢弃最旧的一组。
【此操作不可逆,被截断的消息将永久丢失】若业务要求完整保留原始对话,不可启用该选项。
批量清理知识库过期文档
方法一:使用Dify官方Python SDK执行清理
安装SDK:pip install dify-client
创建脚本clean_knowledge.py,填入以下内容:
from dify_client import KnowledgeBase<br>import datetime<br><br>kb = KnowledgeBase(api_key="your_admin_api_key", base_url="http://your-dify-host/api/v1")<br>expired_docs = kb.list_documents(<br> updated_before=datetime.datetime.now() - datetime.timedelta(days=180),<br> accessed_after=None<br>)<br>for doc in expired_docs:<br> kb.delete_document(doc["id"])<br>
运行脚本前,确认your_admin_api_key具有管理员权限,且base_url指向内网可访问地址。
方法二:直接调用管理API(适合CI/CD集成)
向POST /api/v1/admin/clear_expired发送请求,payload中指定"expired_before"为"2026-04-21T00:00:00Z"(即180天前的ISO时间),并设置"dry_run": false执行真实删除。
执行数据库瘦身操作
第一步:连接Dify所用PostgreSQL实例,使用psql -U dify -d dify登录。
第二步:执行VACUUM FULL清理已删除记录占用的空间,重点针对大表:
VACUUM FULL conversation_sessions;
VACUUM FULL message_logs;
VACUUM FULL knowledge_document;
第三步:重建索引提升后续查询效率,避免因频繁DELETE导致索引膨胀:
REINDEX TABLE conversation_sessions;
REINDEX TABLE message_logs;
【VACUUM FULL会锁表,必须在业务低峰期执行】若系统无法停写,改用并发式VACUUM(不带FULL),但效果略弱。











