Last active
June 6, 2019 12:42
-
-
Save strokirk/ee42df8438aace89e05d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def print_queries(w=80): | |
| from django.db import connection | |
| print() | |
| for i, query in enumerate(connection.queries): | |
| sql = query["sql"] | |
| print("[{:>2}] {}".format(i + 1, sql[:w])) | |
| print("Total queries: %s" % len(connection.queries)) | |
| print() | |
| def norm_sql(sql): | |
| import re | |
| tbl = re.search(r" FROM `(?P<table>\w*)`", sql) | |
| if tbl: | |
| tblname = tbl.groups()[0] | |
| sql = re.sub(r"`%s`\.`(?P<fld>\w*)`" % tblname, r"%s.\1" % tblname[0].upper(), sql) | |
| sql = re.sub(r" FROM ", "\nFROM ", sql) | |
| return sql | |
| class QueryCounter: | |
| def __init__(self): | |
| from django.db import connection | |
| import time | |
| self.connection = connection | |
| self.queries_per_tick = [len(connection.queries)] | |
| self.ticks = [time.time()] | |
| def tick(self): | |
| self.ticks.append(time.time()) | |
| self.queries_per_tick.append(len(self.connection.queries)) | |
| return self.ticks[-2] - self.ticks[-1] | |
| def total_queries(self): | |
| return self.queries_per_tick[-1] - self.queries_per_tick[0] | |
| def total_time(self): | |
| return self.ticks[-1] - self.ticks[0] | |
| def slowest_tick(self): | |
| slowest = 0 | |
| for i, tick in enumerate(self.ticks[1:]): | |
| if tick - self.ticks[i] > slowest: | |
| slowest = tick - self.ticks[i] | |
| return slowest | |
| def get_queries(self): | |
| return self.connection.queries[self.queries_per_tick[0]:self.queries_per_tick[-1]] | |
| def slowest_queries(self): | |
| return sorted(self.get_queries(), key=lambda s: s['time']) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment