我正在尝试测量查询我的一个Django视图所需的时间。它基本上是用不同的LIMIT子句(sqlite)做一个SELECT。以下是我获得的时间,首先直接调用view函数,然后使用urllib将其作为GET请求调用。
LIMIT view(s.) request(s.)
25 4.5 12.6
100 1.6 2.1
400 3.5 3.3
800 4.4 4.7
1600 7.6 8.4
...
为什么第一个时间这么高?是否有一些明显的原因,比如我无法禁用的某些缓存,或数据库访问固有的?
我没有使用cache_page
,我尝试按照我在网络上找到的一些建议来整体禁用缓存:
settings.CACHE_BACKEND = 'dummy:///'
settings.CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}}
如果我没有重新启动服务器并再次运行测试,则12s(第一次请求呼叫)将按预期变为1s,但4.5s(第一次查看呼叫)保持不变。
答案 0 :(得分:1)
除了Django的请求缓存之外,还有数据库查询缓存,读取sqlite文件时的文件系统缓存等。但是,我不确定禁用缓存会实现什么。它们是现实世界请求 - 响应周期的一部分。
如果您想知道数据库查询的效率,只需使用./manage.py dbshell
(MySQL和{{} EXPLAIN
直接在数据库控制台({{1}})中运行实际的SQL查询3}},不确定sqlite)。这将为您提供数据库操作的详细列表以及每个步骤使用的资源量。所以你可以从那里进行优化。