是否有任何工具,插件或技术可用于帮助识别Django应用程序上的n + 1个查询? Rails有一个名为bullet的gem,用于识别n + 1个查询和日志,或者以多种方式弹出警告,但我还没有能够找到类似于Django的任何类似内容。如果没有人知道现有的解决方案,我会接受如何编写自己的插件的指导。
答案 0 :(得分:1)
Scout,一种支持Django应用的APM产品,identifies expensive N+1 queries正在制作中。
以下是如何使用它:
安装scout-apm
Python包(MIT许可证)并提供您的Scout API密钥。 API密钥位于Scout Web UI中。
部署您的应用,确认Scout正在接收数据,然后在一小时左右回来查看。 Scout分析每个Web请求,检查N + 1,然后在仪表板上显示表现最差的人(screenshot)。
选择您感兴趣的N + 1,以显示触发N + 1的请求的交易。这包括查询的原始SQL以及触发查询的LOC的回溯(screenshot)。
Scout优于Bullet等开发工具的优势:大多数开发数据库都有少量数据,因此N + 1的真正影响通常是未知的。 Scout只识别那些消耗大量时间的N + 1,这有助于集中精力。
答案 1 :(得分:1)
nplusone
执行此操作
在Python中自动检测n + 1查询问题
https://github.com/jmcarp/nplusone
带有适当的Django支持!还与烧瓶,香草wsgi,...
集成答案 2 :(得分:0)
我不知道任何会自动找到并警告你的插件。
我个人使用Django调试工具栏: https://github.com/django-debug-toolbar/django-debug-toolbar
它显示了在页面上运行的查询数,您可以查看它们。