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