You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django对接PostgreSQL后性能极慢,调整配置无效该如何解决?

排查与调整方向

1. Django 配置与ORM层面排查

  • 开启Django数据库查询日志定位异常查询:在settings.py中配置LOGGING规则,将django.db.backends的日志级别设为DEBUG,访问一次admin后台后统计日志输出的SQL数量,确认是否存在N+1查询问题。
  • 优化ModelAdmin的关联查询配置:如果在list_display、list_filter、search_fields中用到了外键/多对多字段,需给对应ModelAdmin加上list_select_related(针对外键一对一)或prefetch_related(针对多对多)配置,减少关联查询次数。
  • 检查admin冗余功能配置:确认list_per_page是否设置过大、list_editable是否涉及大量关联字段、date_hierarchy绑定的字段是否未建索引,这些配置都会额外增加查询开销。
  • 校验迁移生成的表结构完整性:执行python manage.py inspectdb对比自动生成的模型与你编写的原模型,确认db_index、唯一约束等索引配置是否正确同步到PostgreSQL中。

2. PostgreSQL 数据库层面排查

  • 调整PG核心运行参数:默认PG配置为适配低配置设备做了非常保守的设置,需根据服务器内存调整核心参数:shared_buffers设为系统可用内存的1/4,effective_cache_size设为系统可用内存的1/2到3/4,work_mem、maintenance_work_mem根据业务场景适当调大,你之前调整的seq_page_cost、random_page_cost仅影响执行计划选择,不是核心性能参数。
  • 开启慢查询日志定位瓶颈:在postgresql.conf中设置log_min_duration_statement = 100(记录执行超过100ms的SQL),复现卡顿操作后查看慢查询日志,针对性给对应的查询字段加索引或优化逻辑。
  • 更新数据库统计信息:刚完成迁移的库可能统计信息缺失,导致PG优化器生成错误的执行计划,执行ANALYZE VERBOSE;全量更新库表统计信息。
  • 校验自增主键序列一致性:切换数据库导入数据后容易出现自增序列与表实际最大ID不匹配的问题,导致写入操作出现隐式重试卡顿,可执行SELECT setval(pg_get_serial_sequence('auth_user', 'id'), coalesce(max(id),0) + 1, false) FROM auth_user;同步admin用户表的序列,其他核心业务表也可以按此规则校验。
  • 调整数据库连接复用配置:在Django的settings.py中给CONN_MAX_AGE设置60以上的合理值,避免每次请求都重新建立数据库连接带来的开销。
  • 检查锁等待情况:卡顿的时候执行SELECT * FROM pg_stat_activity WHERE state = 'active';查看是否有长时间运行的查询阻塞了正常请求。

3. 环境与部署层面排查

  • 检查应用与数据库的网络延迟:如果Django服务和PostgreSQL没有部署在同一台服务器,先测试两者的网络连通延迟,大量小查询的场景下网络延迟会被放大导致卡顿。
  • 校验存储IO性能:如果使用机械硬盘或低IOPS的云硬盘,随机读写性能不足也会导致查询变慢,可使用磁盘性能测试工具确认存储是否满足需求。
  • 确认版本兼容性:检查你使用的PostgreSQL版本是否在当前Django版本的官方支持范围内,跨大版本的不兼容也可能引发未知的性能问题。

内容的提问来源于stack exchange,提问作者shoonya007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:07