source

Django의 첫 번째 쿼리는 항상 느리다.

bestscript 2022. 11. 12. 08:31

Django의 첫 번째 쿼리는 항상 느리다.

저는 간단한 장고 앱을 가지고 있고, 두 가지 모델과 뷰만 있습니다.db를 쿼리할 때마다 첫 번째 쿼리는 항상 1초 정도 걸리고 그 이후의 쿼리는 거의 순식간에 이루어집니다.

제 견해는 다음과 같습니다.

def my_view(request):
     start = time.time()
     print('0', time.time() - start)

     a = TestClass.objects.get(name="test")
     print('1', time.time() - start)

     b = TestCustomer.objects.get(name="test")
     print('2', time.time() - start)

     return render(request, 'test.html', {})

실행 시 다음과 같은 출력이 표시됩니다.

0 0.0
1 1.0049302577972412
2 1.0059285163879395

즉, 첫 번째 쿼리가 두 번째 쿼리에 비해 훨씬 느립니다.

첫 번째 질문을 코멘트하면TestClassquery)는 다음과 같은 출력을 받습니다.

0 0.0
1 0.0
2 1.0183587074279785

즉, Test Customer 쿼리가 갑자기 느려진 것입니다.두 모델 모두 1개의 필드만 있습니다(nameCharField 입니다).

왜 첫 번째 질문은 항상 더 느릴까요?디버깅을 비활성화해 봤지만 별 차이가 없습니다.Django를 무시하고 직접 쿼리를 실행하면 즉시 실행됩니다.

SELECT  `customers_testcustomer`.`id`, 
        `customers_testcustomer`.`name` 
 FROM   `customers_testcustomer` 
 WHERE  `customers_testcustomer`.`name` = 'test';

/* Affected rows: 0  Found rows: 1  Warnings: 0  Duration for 1 query: 0,000 sec. */

설정에 따라 요청이 완료된 후 데이터베이스에 대한 연결이 닫힐 수 있습니다.가 로 설정되어 있는 경우는, 다음과 같습니다.0따라서 요청마다 새로운 연결을 설정해야 합니다.

예를 들어 다음과 같이 설정할 수 있습니다.CONN_MAX_AGE로.60이를 통해 이전 요청에 의해 열린 연결을 재사용할 수 있으므로 이 오버헤드를 피할 수 있습니다.서버의 첫 번째 쿼리는 여전히 약간 느릴 수 있지만 다음 요청의 쿼리는 일반적으로 더 빠릅니다.

언급URL : https://stackoverflow.com/questions/56930408/first-query-in-django-is-always-slow