`BoltStatementResultSummary` 中的 `result_available_after` 和 `result_consumed_after` 有什么区别?如何测量查询执行时间?
What is difference between `result_available_after` and `result_consumed_after` in `BoltStatementResultSummary`? How to measure query execution time?
我尝试从文档中理解 here,引用文档
result_available_after = None
The time it took for the server to have the result available.
result_consumed_after = None
The time it took for the server to consume the result.
我还是不明白实际的区别。
如果我想扩展程序并找到查询的执行时间,我应该考虑哪一个。如果我再次 运行 同样的查询,为什么 result_available_after
会变成 0 ms
?是缓存的原因吗?我尝试按照 here 的建议更改设置 dbms.memory.pagecache.size=1M
,但没有成功。我怎样才能只测量查询的执行时间?
我正在使用 Neo4j 4.0 和 neo4j python 驱动程序进行查询。
result_available_after
是第一个结果被发现并可用之前的时间。可能还有更多的结果需要从查询中找到和流式传输,但这是合理的,客户端可以开始将结果流式传输回来。
result_consumed_after
是所有结果被找到并被/发送给进行查询的客户端的时间。至此查询完全结束。
至于看到 result_available_after
变为 0,这可能是两件事的结合:
由于之前只是运行查询,查询已经被缓存,所以后续执行不需要编译和规划,只是从缓存中获取规划并执行。这会排除编译和计划时间。
如果查询是针对相同的数据,那么图形中接触和检索的部分现在应该在页面缓存中。在随后的执行中,遍历会更快,因为对于遍历它只需要命中页面缓存。所以这会排除磁盘 I/O。这就是为什么最好有足够的 RAM 以允许将页面缓存配置为覆盖尽可能多的图形,以避免磁盘成本 I/O.
我尝试从文档中理解 here,引用文档
result_available_after = None The time it took for the server to have the result available.
result_consumed_after = None The time it took for the server to consume the result.
我还是不明白实际的区别。
如果我想扩展程序并找到查询的执行时间,我应该考虑哪一个。如果我再次 运行 同样的查询,为什么 result_available_after
会变成 0 ms
?是缓存的原因吗?我尝试按照 here 的建议更改设置 dbms.memory.pagecache.size=1M
,但没有成功。我怎样才能只测量查询的执行时间?
我正在使用 Neo4j 4.0 和 neo4j python 驱动程序进行查询。
result_available_after
是第一个结果被发现并可用之前的时间。可能还有更多的结果需要从查询中找到和流式传输,但这是合理的,客户端可以开始将结果流式传输回来。
result_consumed_after
是所有结果被找到并被/发送给进行查询的客户端的时间。至此查询完全结束。
至于看到 result_available_after
变为 0,这可能是两件事的结合:
由于之前只是运行查询,查询已经被缓存,所以后续执行不需要编译和规划,只是从缓存中获取规划并执行。这会排除编译和计划时间。
如果查询是针对相同的数据,那么图形中接触和检索的部分现在应该在页面缓存中。在随后的执行中,遍历会更快,因为对于遍历它只需要命中页面缓存。所以这会排除磁盘 I/O。这就是为什么最好有足够的 RAM 以允许将页面缓存配置为覆盖尽可能多的图形,以避免磁盘成本 I/O.