了解 Django 视图的基准

Understanding benchmark of a Django view

我正在尝试测量查询我的一个 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(第一次查看调用)保持不变。

除了Django的请求缓存之外,还有数据库查询缓存,读取sqlite文件时的文件系统缓存等,但是我不确定禁用缓存会达到什么效果。它们是 real-world request-response 循环的一部分。

如果您想知道数据库查询的效率,只需 运行 直接在数据库控制台 (./manage.py dbshell) 中实际 SQL 查询,使用 EXPLAIN (在 MySQL and Postgresq 中,对 sqlite 不确定)。这为您提供了数据库操作的详细列表以及每个步骤使用的资源量。所以你可以从那里优化。