PostgreSQL内部计时与外部计时

时间:2016-12-18 17:12:18

标签: r postgresql

问题的简短版

为什么使用postgres \timeing on测量查询执行时间与使用R测量查询执行时间有很大不同?

长版

我正在比较三种不同的数据库模式:一种是3-NF(图中的NF),一种是非规范化(NN),另一种是使用自定义访问功能(EF)。这三个都返回相同的结果。非规范化版本实际上存储了复杂交叉连接的结果,这在NF中是必需的。在EF版本中,结果结构的一些知识被用于(可能)比NF版本更快。为了模拟性能随时间的降低,所有三个模式中的数据库逐步填充,数据直到3月,6月,9月,12月,并且测量查询执行时间。在每个查询之间,我使用See and clear Postgres caches/buffers?中描述的步骤清除缓存。

我担心使用R postgresSQL-API来执行查询,因为我担心我会或多或少地测量R将结果放入df需要多长时间。所以我使用R为每个案例生成并执行一个bash脚本。在这个bash脚本中,我使用grep来获取执行查询所需的postgreSQL时间。如图所示https://dba.stackexchange.com/questions/21509/pipe-psql-timing-to-file。结果如下图所示。

PostgreSQL timeing

除了我发现标准化结果实际上比非正规化版本快一点(如果你有想法为什么这可能让我知道)让我感到困惑这个图片非常清楚。

然而,在R timing命令中包含bash脚本的执行,我得到以下结果:

non log version

以下是具有对数比例的相同图片:

log version

我想知道为什么时间差异如此之大。但是,我愿意把postgreSQL时代作为真正的时代。但后来我使用atop来跟踪这个过程中的内存使用情况,结果与R的时间方法更好地匹配。下图显示了免费的mem页面和颜色显示了在此期间测试的db。

memory usage

你有什么想法为什么这两种方法不同,你会把它当作“真正的”执行时间。非常感谢任何帮助。

0 个答案:

没有答案