PostgreSQL如何缓存语句和数据?

fra*_*ncs 34 postgresql

在Oracle中,SQL语句将缓存在shared_pool中,经常选择的数据将缓存在db_cache中.

PostgreSQL做什么?SQL语句和数据是否会缓存在shared_buffers中?

Edm*_*und 45

通常,只有表和索引文件的内容将缓存在共享缓冲区空间中.

在某些情况下缓存查询计划.确保这一点的最佳方法是预先查询一次查询,然后每次执行它.

查询的结果不会自动缓存.如果你重新运行相同的查询 - 即使它的字母相同,并且没有对数据库执行更新 - 它仍将执行整个计划.当然,它将使用已经在共享缓冲区缓存中的任何表/索引数据; 所以它不一定要再次从磁盘读取所有数据.

计划缓存更新

计划缓存通常在每个会话中完成.这意味着只有使计划可以使用缓存版本的连接.其他连接必须制作和使用自己的缓存版本.这不是一个真正的性能问题,因为与重新连接的成本相比,重复使用计划所节省的费用几乎总是微乎其微.(除非你的疑问真的很复杂.)

如果你使用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中输入的即席查询.

希望其他人可以详细说明查询计划缓存的任何其他情况.

  • 它们被缓存在处理连接的服务器进程的内存堆中,这就是为什么您无法从不同的连接观察它们。目录视图“pg_prepared_statements”将显示当前连接的语句。 (2认同)