9. 分析和性能

如果您觉得其中一个页面所花费的时间超过了应该生成的时间,那么很可能是您进行了太多的RQL查询。显然,还有其他原因,但经验往往表明,这是第一件要追踪的事情。幸运的是,CubicWeb提供了一个配置选项来记录RQL查询。在你的 all-in-one.conf 文件,设置 query-log-file 选项:

# web application query log file
query-log-file=/home/user/myapp-rql.log

然后重新启动应用程序,重新加载页面并停止应用程序。文件 myapp-rql.log 现在包含在测试期间执行的RQL查询列表。它是一个简单的文本文件,包含以下行:

Any A WHERE X eid %(x)s, X lastname A {'x': 448} -- (0.002 sec, 0.010 CPU sec)
Any A WHERE X eid %(x)s, X firstname A {'x': 447} -- (0.002 sec, 0.000 CPU sec)

每条线路的结构为:

<RQL QUERY> <QUERY ARGS IF ANY> -- <TIME SPENT>

CubicWeb还提供 ExLog公司 用于检查和汇总此类文件中的数据的命令:

$ cubicweb-ctl exlog /home/user/myapp-rql.log
0.07 50 Any A WHERE X eid %(x)s, X firstname A {}
0.05 50 Any A WHERE X eid %(x)s, X lastname A {}
0.01 1 Any X,AA ORDERBY AA DESC WHERE E eid %(x)s, E employees X, X modification_date AA {}
0.01 1 Any X WHERE X eid %(x)s, X owned_by U, U eid %(u)s {, }
0.01 1 Any B,T,P ORDERBY lower(T) WHERE B is Bookmark,B title T, B path P, B bookmarked_by U, U eid %(x)s {}
0.01 1 Any A,B,C,D WHERE A eid %(x)s,A name B,A creation_date C,A modification_date D {}

这个命令对查询进行排序和统一,以便很容易看到需要优化的热点在哪里。

不要忽略设置 fetch_attrs 属性可以在实体类中定义,因为它可以大大减少执行的查询数(请参见 加载的属性和默认排序管理

你也应该知道 轮廓 期权在 all-in-on.conf .如果设置,此选项将使应用程序在 hotshot 会话并将结果存储在指定的文件中。

最后但同样重要的是,如果您使用的是PostgreSQL数据库后端,那么清空数据库可以显著提高查询的性能(通过更新查询优化器使用的统计信息)。现在,这是不时自动完成的,但是如果您刚在数据库中导入了大量数据,您将希望将其真空(打开分析选项)。有关详细信息,请阅读数据库的文档。