在Oracle中,SQL语句将缓存在shared_pool中,经常选择的数据将缓存在db_cache中。
PostgreSQL做什么? SQL语句和数据是否会缓存在shared_buffers中?
答案 0 :(得分:42)
通常,只有表和索引文件的内容将缓存在共享缓冲区空间中。
在某些情况下会缓存查询计划。确保这一点的最佳方法是预先查询一次查询,然后每次执行它。
查询结果不会自动缓存。如果你重新运行相同的查询 - 即使它的字母相同,并且没有对数据库执行更新 - 它仍将执行整个计划。当然,它将使用已经在共享缓冲区缓存中的任何表/索引数据;所以它不一定要再次从磁盘读取所有数据。
计划缓存通常在每个会话中完成。这意味着只有使计划可以使用缓存版本的连接。其他连接必须制作和使用自己的缓存版本。这不是一个真正的性能问题,因为与重新连接的成本相比,重复使用计划所节省的费用几乎总是微乎其微。 (除非您的查询真的复杂。)
如果您使用PREPARE:http://www.postgresql.org/docs/current/static/sql-prepare.html
,会缓存当查询在PL / plSQL函数中时 进行缓存:http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING
它不缓存在psql中输入的即席查询。
希望其他人可以详细说明查询计划缓存的任何其他情况。