From ceee6f38d544687de94b67fe1b33394f4efbeadb Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Tue, 9 Dec 2025 21:44:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(statistic):=20=E5=BB=B6=E8=BF=9F=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E4=BB=BB=E5=8A=A1=E5=90=AF=E5=8A=A8=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=92=8C=E8=BF=90=E8=A1=8C=E9=97=B4=E9=9A=94=E4=BB=A5=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(engine): 禁用 SQLAlchemy 查询编译缓存以防止 tuple 膨胀 fix(message_repository): 优化日志输出格式以提高可读性 --- src/chat/utils/statistic.py | 2 +- src/common/database/core/engine.py | 5 +++++ src/common/message_repository.py | 7 ++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/chat/utils/statistic.py b/src/chat/utils/statistic.py index 8f5e939d2..f760a0f44 100644 --- a/src/chat/utils/statistic.py +++ b/src/chat/utils/statistic.py @@ -121,7 +121,7 @@ class StatisticOutputTask(AsyncTask): def __init__(self, record_file_path: str = "mofox_bot_statistics.html"): # 延迟300秒启动,运行间隔300秒 - super().__init__(task_name="Statistics Data Output Task", wait_before_start=0, run_interval=300) + super().__init__(task_name="Statistics Data Output Task", wait_before_start=600, run_interval=900) self.name_mapping: dict[str, tuple[str, float]] = {} """ diff --git a/src/common/database/core/engine.py b/src/common/database/core/engine.py index 0b1f724d4..d9c7a02a6 100644 --- a/src/common/database/core/engine.py +++ b/src/common/database/core/engine.py @@ -114,6 +114,9 @@ def _build_sqlite_config(config) -> tuple[str, dict]: "check_same_thread": False, "timeout": 60, }, + # ⚠️ 禁用 SQLAlchemy 查询编译缓存以阻断可能的 tuple 膨胀 + # 观察到长时间运行后 tuple 数量飙升,先通过关闭缓存止血 + "query_cache_size": 0, } logger.debug(f"SQLite配置: {db_path}") @@ -162,6 +165,8 @@ def _build_postgresql_config(config) -> tuple[str, dict]: "pool_timeout": config.connection_timeout, "pool_recycle": 3600, "pool_pre_ping": True, + # ⚠️ 禁用 SQLAlchemy 查询编译缓存以阻断可能的 tuple 膨胀 + "query_cache_size": 0, } if connect_args: diff --git a/src/common/message_repository.py b/src/common/message_repository.py index 3e9f37e10..9f997fa89 100644 --- a/src/common/message_repository.py +++ b/src/common/message_repository.py @@ -112,16 +112,13 @@ async def find_messages( if limit <= 0: capped_limit = SAFE_FETCH_LIMIT logger.warning( - "find_messages 未指定 limit,自动限制为 %s 行以避免内存占用过高", - capped_limit, + f"find_messages 未指定 limit,自动限制为 {capped_limit} 行以避免内存占用过高", ) else: capped_limit = max(1, int(limit)) if capped_limit > SAFE_FETCH_LIMIT: logger.warning( - "find_messages 请求的 limit=%s 超过安全上限,已限制为 %s", - limit, - SAFE_FETCH_LIMIT, + f"find_messages 请求的 limit={limit} 超过安全上限,已限制为 {SAFE_FETCH_LIMIT}", ) capped_limit = SAFE_FETCH_LIMIT