在postgresql中解释(缓冲,分析)

时间:2017-05-10 08:29:57

标签: sql postgresql instructions

我是postgresql的新手,我尝试理解explain(缓冲,分析)指令。我有一个查询,我使用explain(buffers,analyze)执行它。

第一次执行时,性能比第二次更差。此外,第一次在'hit'旁边获得'read'参数,而第二次'read'不存在。

有人可以帮我理解吗?

1 个答案:

答案 0 :(得分:6)

第一次选择,页面变热 - 它们被加载到缓存中,一旦它们在RAM中 - 所有下一个选择将更快(RAM速度更高)。

因此buffers显示读取,当页面不在缓存中时,cos postgres读取它们,并且当它们变热时不读取,因此缓存被点击...

使用docs更新:

  

BUFFERS

     

包含有关缓冲区使用情况的信息。具体来说,包括   命中,读取,弄脏和写入共享块的数量   本地块命中,读取,弄脏,写入,以及临时数量   块读取和写入。命中意味着避免了读取,因为   在需要时,已在缓存中找到该块。共享块   包含常规表和索引的数据;本地块包含   来自临时表和索引的数据;而临时块包含   用于各种,哈希,物化计划节点的短期工作数据,   和类似的情况。脏污的块数表示数量   此查询更改的以前未修改的块的数量;而   写入的块数表示数量   在此期间,此后端从缓存中逐出的块被清除   查询处理。显示上级节点的块数   包括其所有子节点使用的那些。仅限文本格式   打印非零值。此参数仅可在以下时使用   ANALYZE也启用了。它默认为FALSE。

令人惊讶的是缓冲区here并不多。