Django 通过psycopg2连接执行的查询数
我想知道在psycopg2连接上执行的sql查询的数量 有办法得到这个号码吗 如果http请求生成的语句太多,我想发出警告 我正在运行django应用程序。如果DEBUG是真的,那么我有。但我希望从生产服务器获取此值 更新Django 通过psycopg2连接执行的查询数,django,postgresql,psycopg2,Django,Postgresql,Psycopg2,我想知道在psycopg2连接上执行的sql查询的数量 有办法得到这个号码吗 如果http请求生成的语句太多,我想发出警告 我正在运行django应用程序。如果DEBUG是真的,那么我有。但我希望从生产服务器获取此值 更新 我想从prod环境中获取数字(统计数据)。这个问题不是关于调试一个特定的http请求。如果您的数据库和其他所有东西上都有相同的环境,那么对生产和开发进行的查询量是相同的 我建议您使用如上所述,复制查看视图执行的查询数量,并在此基础上重新思考代码。如果您想查看这些查询的性能,我
我想从prod环境中获取数字(统计数据)。这个问题不是关于调试一个特定的http请求。如果您的数据库和其他所有东西上都有相同的环境,那么对生产和开发进行的查询量是相同的 我建议您使用如上所述,复制查看视图执行的查询数量,并在此基础上重新思考代码。如果您想查看这些查询的性能,我建议您使用postgresql中的
explain
命令
我通常会复制查询并将其与explain一起粘贴到postgreaql数据库外壳中。见此:看一看。它是一个分析工具,记录响应时间和查询数等指标
如果您想推出自己的解决方案,并且使用的是Django 2.0,那么可以创建一个具有。文档甚至显示了一个QueryLogger
类:
import time
from django.db import connection
class QueryLogger:
def __init__(self):
self.queries = []
def __call__(self, execute, sql, params, many, context):
current_query = {'sql': sql, 'params': params, 'many': many}
start = time.time()
try:
result = execute(sql, params, many, context)
except Exception as e:
current_query['status'] = 'error'
current_query['exception'] = e
raise
else:
current_query['status'] = 'ok'
return result
finally:
duration = time.time() - start
current_query['duration'] = duration
self.queries.append(current_query)
class QueryLogginMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
ql = QueryLogger()
with connection.execute_wrapper(ql):
response = self.get_response(request)
# do something with ql.queries here
return response
您是否尝试了Django调试工具栏?它显示执行查询的数量。我想获取生产机器上每个http请求的数量。django调试工具栏注册一个信号处理程序来完成它的工作。我希望避免这种开销,因为我担心django调试工具栏会降低性能。你是对的,如果我对dev中的相同数据集执行完全相同的请求,那么查询量将相等。但我需要prod环境的统计数据。我无法在开发环境中重现一个月的prod流量。我更新了这个问题,让它更清楚。在这种情况下,你可以使用一些工具,根据你的交通和环境更容易安装和使用。它可能很昂贵,但在我看来完全值得。