Django查询探查器
django-query-profiler的Python项目详细描述
这是一个针对Django应用程序的查询分析器,用于帮助开发人员回答以下问题:“我的Django代码/页面/API很慢,我如何找出原因?”?““
以下是探查器的一些功能:
- 显示进行N+1 sql调用的代码路径:显示正在进行N+1调用的堆栈跟踪的sql以及sql计数
- 显示了建议的解决方案:如果减少sql的解决方案是简单地应用select_相关的或prefetch_相关的,这将作为建议突出显示
- 显示精确的sql重复项:其中(sql,参数)完全相同的查询计数。这是一种sql,实现查询缓存将有所帮助
- 火焰图可视化:将所有堆栈跟踪收集在一起,以便快速识别哪些代码区域导致了数据库的负载
- 命令行或chrome插件:可以通过上下文管理器从命令行调用profiler,也可以通过中间件调用它,输出显示在chrome插件中
- 超级容易在任何应用程序中配置:唯一的改变是设置.py文件和文件网址.py文件
这是chrome插件的repo
要求
这适用于django>;=2.0的任何版本,并且运行在python>;=3.6上
探查器正在运行
作为chrome插件
此图显示了chrome插件在配置和安装后如何显示配置的数据
^{1}$在命令行
请参阅PR中的file,了解如何使用上下文管理器,以及查找性能问题有多容易:-)
对于命令行或chrome插件,Django查询分析器的输出是相同的。实际上,chrome插件显示由中间件设置的输出-这只是一个简单的上下文管理器包装器。在
入门
安装
最简单的方法是从pip安装django查询分析器,然后从 chrome网络商店。在
Python包:
pip install django-query-profiler
Chrome插件:
这在文档的installation部分有详细介绍
配置:
这个配置是当我们想使用profiler和chrome插件的时候。如果我们想把它用在 命令行,配置要简单得多(两行更改为设置.py文件)docs
设置.py:
^{pr2}$网址.py:
# Add this line to existing urls.py path('django_query_profiler/', include('django_query_profiler.client.urls'))
请参阅PR,了解如何在应用程序中配置它, 以及配置后插件的外观
这在文档的configuration instructions部分有详细介绍
探查器的工作原理
文档中how the profiler works部分的文档也对此进行了详细介绍, 以及代码的组织方式。在
这些文档还包含对各种链接的引用,这些链接帮助我们了解Django的内部结构,以及帮助我们学习如何在Django执行查询时添加钩子的各种项目
选择探查器级别
我们有两个级别的profiler,每个级别都有不同的开销。这两个级别是:
- QUERY_SIGNATURE:这是我们捕获查询和堆栈跟踪的模式。这种模式计算出N+1的代码路径,并告诉我们所提出的解决方案
- QUERY:这是我们只捕获查询而不是堆栈跟踪的模式
自定义探查器
我们试图通过在不同的点提供钩子来定制profiler。其中包括一些用例 在这里customizing the defaults节。在
当我们从真实世界的用例中收集更多反馈时,我们计划添加更多的钩子来定制profiler。在
文件
完整的文档可从readthedocs获得
- 项目
标签: