Django查询探查器

django-query-profiler的Python项目详细描述


https://img.shields.io/pypi/l/django.svghttps://travis-ci.com/django-query-profiler/django-query-profiler.svg?branch=masterhttps://codecov.io/gh/django-query-profiler/django-query-profiler/branch/master/graph/badge.svg?token=1Cv7WsOi2Whttps://readthedocs.org/projects/django-query-profiler/badge/?version=latesthttps://img.shields.io/pypi/pyversions/django-query-profiler.svghttps://img.shields.io/pypi/djversions/django-query-profilerhttps://badge.fury.io/py/django-query-profiler.svg

这是一个针对Django应用程序的查询分析器,用于帮助开发人员回答以下问题:“我的Django代码/页面/API很慢,我如何找出原因?”?““

以下是探查器的一些功能:

  1. 显示进行N+1 sql调用的代码路径:显示正在进行N+1调用的堆栈跟踪的sql以及sql计数
  2. 显示了建议的解决方案:如果减少sql的解决方案是简单地应用select_相关的或prefetch_相关的,这将作为建议突出显示
  3. 显示精确的sql重复项:其中(sql,参数)完全相同的查询计数。这是一种sql,实现查询缓存将有所帮助
  4. 火焰图可视化:将所有堆栈跟踪收集在一起,以便快速识别哪些代码区域导致了数据库的负载
  5. 命令行或chrome插件:可以通过上下文管理器从命令行调用profiler,也可以通过中间件调用它,输出显示在chrome插件中
  6. 超级容易在任何应用程序中配置:唯一的改变是设置.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插件:

chrome webstore下载

这在文档的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,了解如何在应用程序中配置它, 以及配置后插件的外观

https://raw.githubusercontent.com/django-query-profiler/django-query-profiler/master/docs/_static/chrome_plugin.png

这在文档的configuration instructions部分有详细介绍

探查器的工作原理

文档中how the profiler works部分的文档也对此进行了详细介绍, 以及代码的组织方式。在

这些文档还包含对各种链接的引用,这些链接帮助我们了解Django的内部结构,以及帮助我们学习如何在Django执行查询时添加钩子的各种项目

选择探查器级别

我们有两个级别的profiler,每个级别都有不同的开销。这两个级别是:

  1. QUERY_SIGNATURE:这是我们捕获查询和堆栈跟踪的模式。这种模式计算出N+1的代码路径,并告诉我们所提出的解决方案
  2. QUERY:这是我们只捕获查询而不是堆栈跟踪的模式

自定义探查器

我们试图通过在不同的点提供钩子来定制profiler。其中包括一些用例 在这里customizing the defaults节。在

当我们从真实世界的用例中收集更多反馈时,我们计划添加更多的钩子来定制profiler。在

对于贡献者

https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square

django查询分析器是在BSD许可证下发布的,就像django本身一样。在

如果你喜欢,请考虑投稿!这些文档涵盖了从如何本地设置到如何组织代码到运行测试的所有内容。在

文件

完整的文档可从readthedocs获得

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
jsoup有效文件路径抛出java。木卫一。FileNotFoundException   java如何在不删除和添加Mapbox中的层的情况下更改SymbolLayer的Z值?   java计算用户定义年数内四个季度的降雨量   如何在Java中轻松地将格式为“20 0F 01”的字符串更改为十六进制值?   java在JPA或Hibernate中“持久类”和“实体”之间有什么区别?   java Android:AlarmManager“缺少对unregisterReceiver()的调用?”当按下后退按钮时   logcat中的java错误“isDataSchedulerEnabled():false”   java i/p col特性必须是字符串或数字类型,但不能是org。阿帕奇。火花利纳格小姐。向量   java如何从Post请求url和浏览器转储中隐藏密码   多线程javamail中的java问题   java我的用户应该直接连接到数据库吗?如何将用户连接到数据库;   java如何获得Spring数据JPA存储库工厂?   windows java字节数组转换为字符串,但不同的操作系统会产生不同的结果   java代码在eclipse中编译,但不在命令行上编译