sqlite3的生产环境性能优化
Posted by backup@lfo.cc; tagged with none
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
'OPTIONS': {
# 使用分号分隔的多条 PRAGMA 语句
'init_command': (
"PRAGMA journal_mode = WAL;" # 最重要:开启写前日志,提升并发
"PRAGMA synchronous = NORMAL;" # 安全与性能平衡,机械硬盘推荐
"PRAGMA cache_size = -524288;" # 512MB 页面缓存(足够覆盖你的 20MB 数据库)
"PRAGMA temp_store = MEMORY;" # 临时表放内存,加速复杂查询
"PRAGMA foreign_keys = ON;" # 强制开启外键(Django 默认已开,这里显式保险)
),
},
'TIMEOUT': 30, # Django 5.x 推荐写法(等同于之前的 'timeout')
'CONN_MAX_AGE': 600, # 持久连接 10 分钟,极大减少机械硬盘的打开/关闭开销
'CONN_HEALTH_CHECKS': True, # Django 3.2+ 新特性,自动检测并清理坏连接
# Django 5.0+ 新增选项,建议开启以获得更好 WAL 模式支持
'ATOMIC_REQUESTS': False, # 如果你不需要每个请求都原子事务,可设 False 进一步提升性能
}
}