针对数据库操作进行优化,启用sqlite的wal优化

This commit is contained in:
JianFeeeee
2025-08-17 08:58:35 +08:00
parent 305ba89d28
commit a68fa32e32

View File

@ -19,6 +19,39 @@ logging.basicConfig(
)
logger = logging.getLogger(__name__)
def configure_wal(cursor, cache_size=-50000, busy_timeout=5000):
"""
配置SQLite WAL选项线程安全
:param cursor: 数据库连接的cursor对象
:param cache_size: 页面缓存大小负数为KB表示
:param busy_timeout: 锁等待超时时间(毫秒)
"""
logger = logging.getLogger(__name__)
try:
# 1. 开启WAL模式
cursor.execute("PRAGMA journal_mode=WAL;")
mode = cursor.fetchone()[0].lower()
# 2. 核心配置项
cursor.execute("PRAGMA synchronous=NORMAL;")
cursor.execute(f"PRAGMA busy_timeout={busy_timeout};")
cursor.execute(f"PRAGMA cache_size={cache_size};")
cursor.execute(f"PRAGMA wal_autocheckpoint=1000;")
# 3. 其他优化配置
cursor.execute("PRAGMA journal_size_limit=32768;") # 32MB WAL文件限制
cursor.execute("PRAGMA mmap_size=268435456;") # 256MB内存映射
if mode == "wal":
logger.debug(f"WAL配置成功: cache_size={cache_size} busy_timeout={busy_timeout}ms")
else:
logger.warning(f"WAL配置部分成功当前模式: {mode}")
except sqlite3.Error as e:
logger.error(f"WAL配置错误: {str(e)}")
class ConfigManager:
"""配置管理类,处理应用配置"""
def __init__(self, config_path="config"):
@ -72,12 +105,12 @@ class MainDatabase:
def __init__(self,db_path):
self.db_path = db_path
self._init_db()
def _ini_db(self):
def _init_db(self):
os.makedirs(os.path.dirname(self.db_path), exist_ok=True)
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
configure_wal(cursor)
cursor.execute("""
""")
configm = ConfigManager()
@ -95,6 +128,7 @@ class ChatDatabase:
os.makedirs(os.path.dirname(self.db_path), exist_ok=True)
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
configure_wal(cursor)
# 创建消息表
cursor.execute("""
@ -120,7 +154,7 @@ class ChatDatabase:
cursor.execute("""
INSERT INTO messages (role, content, sender_id, timestamp)
VALUES (?, ?, ?, ?)
""", ('system', '你是一个qq助手名叫”the real“需要根据消息回答私信或者群聊消息注意语言要尽可能的精炼尽量不要超过20字,同时尽量不要换行,尽量不要让其他用户认出你是ai,同时注意,当聊天中出现[CQ:at,qq=1456128421]时,证明用户在针对你发言,你的uid是1456128421', None, timestamp))
""", ('system', basecontent, None, timestamp))
logger.info(f"初始化系统消息已添加到数据库: {self.db_path}")
conn.commit()
@ -130,9 +164,8 @@ class ChatDatabase:
"""保存消息到数据库"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
configure_wal(cursor)
timestamp = datetime.now().timestamp()
cursor.execute("""
INSERT INTO messages (role, content, sender_id, timestamp)
VALUES (?, ?, ?, ?)
@ -145,7 +178,7 @@ class ChatDatabase:
"""从数据库加载消息"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
configure_wal(cursor)
query = "SELECT role, content, sender_id, timestamp FROM messages"
params = []