有没有办法记录我的django应用程序执行时间长的数据库查询?
答案 0 :(得分:2)
这是一个记录执行时间超过1秒的查询的中间件:
from django.db import connection
import logging
LONG_QUERY_TIME_SEC = 1
class LongQueryLogMiddleware:
def process_response ( self, request, response ):
for q in connection.queries:
if float(q['time']) >= LONG_QUERY_TIME_SEC:
logging.warning("Found long query (%s sec): %s", q['time'], q['sql'])
return response
请注意,因为connection.queries
是进程范围的,所以可以将查询记录两次。这可以通过在函数结束后运行以下内容来解决:
from django.db import reset_queries
reset_queries()