guettli
guettli

Reputation: 27021

Number of queries executed over psycopg2 connection

I would like to know the number of sql queries which were executed on a psycopg2 connection.

Is there a way to get this number?

I would like to warn if a http request produces too many statements.

I am running a django application. If DEBUG is True, then I have connection.queries. But I would like to get this value from a production server

Update

I want numbers (statistics) from the prod environment. This question is not about debugging a particular http request.

Upvotes: 5

Views: 353

Answers (2)

Daniel Hepper
Daniel Hepper

Reputation: 29967

Have a look at django-silk. It is a profiling tool that records metrics like response times and the number of queries.

If you want to roll you own solution and you are using Django 2.0, you can create a middleware with a connection wrapper. The documentation even showcases a QueryLogger class:

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

Upvotes: 4

Luan Fonseca
Luan Fonseca

Reputation: 1517

The amount of queries made on Production and Development are the same, if you have the same environment on your database and everything else.

I recommend you to use Django Debug Toolbar as mentioned, copy see about how many queries your View are doing and rethink your code based on that, if you want to see about those queries performance i recommend you to use the explain command from postgresql.

I usually, copy the query and paste it with explain inside my postgreaql database shell. See this: http://recordit.co/rGZ2SAo7PX

Upvotes: 0

Related Questions