为了检测 API 的慢下降或数据库查询问题,如 N+1查询,往往会依赖外部工具,如 django-silk 或 django-debug-toolbar。
但是我们可以通过使用一款轻量级 middleware 来检测重复查询(N+1问题)的故障,而不需要额外添加依赖。
这个 middleware 直接在运行服务时在控制台输出警告。
日志会显示以下信息:
views.py:45 - N+1 查询: SELECT ... order (12x, 45ms); 使用 select_related()
serializers.py:89 - N+1 查询: SELECT ... customer (8x, 32ms); 使用 prefetch_related()
这个 middleware 只在 DEBUG=True 的情况下运行,即使这个 middleware 在生产环境中被添加到 middleware 列表中,也不会被执行。它还提供了明确的建议,包括文件和行号的具体位置。
本文已详细介绍了完整的设置和实现,感兴趣的可以参照 - [https://medium.com/@logii/make-your-django-app-faster-by-fixing-hidden-query-problems-6992e827d4b4]
评论 (0)