我是postgresql的新手,我尝试理解explain(缓冲,分析)指令。我有一个查询,我使用explain(buffers,analyze)执行它。
第一次执行时,性能比第二次更差。此外,第一次在'hit'旁边获得'read'参数,而第二次'read'不存在。
有人可以帮我理解吗?
答案 0 :(得分:6)
第一次选择,页面变热 - 它们被加载到缓存中,一旦它们在RAM中 - 所有下一个选择将更快(RAM速度更高)。
因此buffers
显示读取,当页面不在缓存中时,cos postgres读取它们,并且当它们变热时不读取,因此缓存被点击...
使用docs更新:
BUFFERS
包含有关缓冲区使用情况的信息。具体来说,包括 命中,读取,弄脏和写入共享块的数量 本地块命中,读取,弄脏,写入,以及临时数量 块读取和写入。命中意味着避免了读取,因为 在需要时,已在缓存中找到该块。共享块 包含常规表和索引的数据;本地块包含 来自临时表和索引的数据;而临时块包含 用于各种,哈希,物化计划节点的短期工作数据, 和类似的情况。脏污的块数表示数量 此查询更改的以前未修改的块的数量;而 写入的块数表示数量 在此期间,此后端从缓存中逐出的块被清除 查询处理。显示上级节点的块数 包括其所有子节点使用的那些。仅限文本格式 打印非零值。此参数仅可在以下时使用 ANALYZE也启用了。它默认为FALSE。
令人惊讶的是缓冲区here并不多。