我可以使用任何工具、插件或技术来帮助识别 Django 应用程序上的 n+1 个查询吗?Rails 有一个名为 bullet 的 gem,它可以识别 n+1 个查询和日志或以多种方式弹出警告,但我无法为 Django 找到任何类似的东西。如果没有人知道现有的解决方案,我愿意接受有关如何编写自己的插件的指导。
3 回答
nplusone
做这个
在 Python 中自动检测 n+1 个查询问题
https://github.com/jmcarp/nplusone
带有适当的 django 支持!还集成了烧瓶,香草wsgi,......
我不知道有任何插件会自动找到它们并警告你。
我个人使用 Django 调试工具栏: https ://github.com/django-debug-toolbar/django-debug-toolbar
它显示页面上运行的查询数,您可以查看它们。
Scout 是一种支持 Django 应用程序的 APM 产品,可识别生产中昂贵的 N+1 查询。
以下是如何使用它:
安装
scout-apm
Python 包(MIT 许可)并提供您的 Scout API 密钥。API 密钥可在 Scout Web UI 中找到。部署您的应用程序,确认 Scout 正在接收数据,然后在大约一小时后回来查看。Scout 分析每个 Web 请求,检查 N+1,然后在仪表板上显示表现最差的请求(截图)。
选择您感兴趣的 N+1 以显示触发 N+1 的请求事务。这包括查询的原始 SQL 和触发查询的 LOC 的回溯(屏幕截图)。
与 Bullet 等开发工具相比,Scout 的一个优势是:大多数开发数据库的数据量很少,因此 N+1 的真正影响通常是未知的。Scout 仅识别那些花费大量时间的 N+1,这可以帮助您集中精力。