Query Debugger
Custom Decorator 형식의 Query Debugger로 전체 API 동작간 호출 된 Query의 갯수, 전체 걸린 시간을 체크할 수 있다.
(ex. Testcode에서 함수 위에 설정해서 실행해도 동작한다)
from django.db import connection, reset_queries
import time
import functools
def query_debugger(func):
@functools.wraps(func)
def inner_func(*args, **kwargs):
reset_queries()
start_queries = len(connection.queries)
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
end_queries = len(connection.queries)
print(f"------------------------------------------------------")
print(f"Function : {func.__name__}")
print(f"Number of Queries : {end_queries - start_queries}")
for idx, query in enumerate(connection.queries):
print(f"{idx+1}번째: {query.get('sql')}")
print(f"Finished in : {(end - start):.6f}s")
print(f"------------------------------------------------------")
return result
return inner_func
Logger
실제 어떤 Query문이 얼마의 시간동안 실행되는지 낱개로 확인할 때 유용
# https://docs.djangoproject.com/en/1.11/topics/logging/
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
}
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
}
'Python > Django' 카테고리의 다른 글
[Django] Query Profiling Tool (3) - Silk (0) | 2022.08.12 |
---|---|
[Django] Query Profiling Tool (1) - Django debug toolbar (0) | 2022.08.12 |
[Django] Queryset 최적화 기법 (select, prefetch, F, Indexing 등) (0) | 2022.08.11 |
[Django] ORM Queryset 특징 (0) | 2022.08.08 |
[Django] django-dotenv 설정 (0) | 2022.08.08 |