3

我可以使用任何工具、插件或技术来帮助识别 Django 应用程序上的 n+1 个查询吗?Rails 有一个名为 bullet 的 gem,它可以识别 n+1 个查询和日志或以多种方式弹出警告,但我无法为 Django 找到任何类似的东西。如果没有人知道现有的解决方案,我愿意接受有关如何编写自己的插件的指导。

4

3 回答 3

4

nplusone做这个

在 Python 中自动检测 n+1 个查询问题

https://github.com/jmcarp/nplusone

带有适当的 django 支持!还集成了烧瓶,香草wsgi,......

于 2018-12-14T10:23:31.497 回答
1

我不知道有任何插件会自动找到它们并警告你。

我个人使用 Django 调试工具栏: https ://github.com/django-debug-toolbar/django-debug-toolbar

它显示页面上运行的查询数,您可以查看它们。

于 2016-01-12T01:53:56.247 回答
1

Scout 是一种支持 Django 应用程序的 APM 产品,可识别生产中昂贵的 N+1 查询

以下是如何使用它:

  1. 安装scout-apmPython 包(MIT 许可)并提供您的 Scout API 密钥。API 密钥可在 Scout Web UI 中找到。

  2. 部署您的应用程序,确认 Scout 正在接收数据,然后在大约一小时后回来查看。Scout 分析每个 Web 请求,检查 N+1,然后在仪表板上显示表现最差的请求(截图)。

  3. 选择您感兴趣的 N+1 以显示触发 N+1 的请求事务。这包括查询的原始 SQL 和触发查询的 LOC 的回溯(屏幕截图)。

与 Bullet 等开发工具相比,Scout 的一个优势是:大多数开发数据库的数据量很少,因此 N+1 的真正影响通常是未知的。Scout 仅识别那些花费大量时间的 N+1,这可以帮助您集中精力。

于 2018-05-12T15:33:57.250 回答