Postgresql 强制数据保留在缓存中
在PostgreSQL 12中,我有一个大表的一部分,我希望随时缓存它。这些查询使得相同的行(几乎)永远不会被读取两次,所以我不能依赖自动缓存。我正在阅读pg_prewarm,它似乎适合加载缓存,但我没有发现任何关于防止它随时间被覆盖的内容。有什么提示吗?谢谢 AFAIK PostgreSQL中没有用于锁定数据库缓存中特定对象页面的文档化功能。AFAIK PostgreSQL中没有用于锁定数据库缓存中特定对象页面的文档化功能。。确保表保持高速缓存的唯一方法是使用足够大的Postgresql 强制数据保留在缓存中,postgresql,caching,Postgresql,Caching,在PostgreSQL 12中,我有一个大表的一部分,我希望随时缓存它。这些查询使得相同的行(几乎)永远不会被读取两次,所以我不能依赖自动缓存。我正在阅读pg_prewarm,它似乎适合加载缓存,但我没有发现任何关于防止它随时间被覆盖的内容。有什么提示吗?谢谢 AFAIK PostgreSQL中没有用于锁定数据库缓存中特定对象页面的文档化功能。AFAIK PostgreSQL中没有用于锁定数据库缓存中特定对象页面的文档化功能。。确保表保持高速缓存的唯一方法是使用足够大的共享\u缓冲区,以容纳整个
共享\u缓冲区
,以容纳整个数据库
但在实践中,这并不是什么大问题:如果一个块没有被经常使用,它可能会从缓存中掉出来,所以当它被使用时,您必须重新读取它。但是单个块包含许多行,因此只有当这些行都不需要时才会退出。确实如此。确保表保持高速缓存的唯一方法是使用足够大的
共享\u缓冲区
,以容纳整个数据库
但在实践中,这并不是什么大问题:如果一个块没有被经常使用,它可能会从缓存中掉出来,所以当它被使用时,您必须重新读取它。但是单个块包含许多行,因此只有在不需要这些行时才会退出。不幸的是,该表是聚集的,因此给定的查询将读取约10 kb的连续数据,因此它将只使用1-2个块。然后我看不出问题。读取10kB的连续数据将只读取几个块。从磁盘读取数据只需要几毫秒。对不起,我弄糊涂了:)任何给定的查询实际上都会读取约1500个块。不幸的是,该表是群集的,因此给定的查询将读取约10 kb的连续数据,因此它只会使用1-2个块。然后我看不出问题。读取10kB的连续数据将只读取几个块。从磁盘读取数据只需要几毫秒。对不起,我把自己弄糊涂了:)任何给定的查询实际上都会读取约1500个数据块。好的,那就没什么可做的了:)谢谢!好吧,那就没什么可做的了:)谢谢!