为了检测 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]