djangoのdbアクセス時間オーバヘッドを大体知りたい。
このコードで測るのは妥当でしょうか?
最後の"コード実行の差"と"クエリ時間の差"との差(db_access_time_diff)の5.9秒がdbアクセス分だと思っています。(db読み取り総データ量は同じ)
最近妙にサイトが重いと感じていたのですが、自作したテンプレートタグ内で毎回modelA.objects.first().Usrのようなことをしていて、それをループしていたもので、そこでものすごく時間を要していました...
djangoは1リクエスト1接続らしいので、接続のオーバーヘッドではなくアクセスのオーバーヘッドかなと考えています。
A.Bどちらもデータベースから取得するデータ量はほぼ同じです。
from django.db import connection from django.db import reset_queries import time # reset querycount reset_queries() A_start = time.time() #------------------------ A for i in range(500): print(Schedule.objects.first().Usr) A_end = time.time() A_time_diff = A_end - A_start print('A_time_diff----------------' + str(A_time_diff)) # 6.52sec print('A_query_count----------------' + str(len(connection.queries))) # 500本 A_query_time = 0.0 for query in connection.queries: A_query_time = A_query_time + float(query['time']) print('A_query_time----------------' + str(A_query_time)) # 0.5sec # reset querycount reset_queries() B_start = time.time() #------------------------- B scs = Schedule.objects.all()[:500] for sc in scs: print(sc.Usr) B_end = time.time() B_time_diff = B_end - B_start print('B_time_diff----------------' + str(B_time_diff)) # 0.26sec print('B_query_count----------------' + str(len(connection.queries))) # 1本 B_query_time = 0.0 for query in connection.queries: B_query_time = B_query_time + float(query['time']) print('B_query_time----------------' + str(B_query_time)) # 0.01sec #---------------------------TOT time_diff = A_time_diff - B_time_diff print('time_diff----------------' + str(time_diff)) # 6.3sec query_time_diff = A_query_time - B_query_time print('query_time_diff----------------' + str(query_time_diff)) # 0.49sec db_access_time_diff = time_diff - query_time_diff print('db_access_time_diff----------------' + str(db_access_time_diff)) # 5.9sec
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。