Postgres缓存(shared_buffers)数据是否根据索引排序?

时间:2019-03-22 07:45:56

标签: postgresql caching indexing

我不太了解Postgres,所以请忍受。

由于对表进行索引并没有根据索引在磁盘上对其进行物理排序,所以我的问题是-shared_buffers的内容是否根据其排序?

1 个答案:

答案 0 :(得分:2)

当PostgreSQL需要读取8K块时,它会找到第一个可用计数为0的可用清理缓冲区,并将该块装入其中。因此,(索引或表)块以随机方式位于共享缓冲区中。

没关系,因为这些天内存是随机访问的。

根据您的评论,您实际上想知道受CLUSTER命令影响的内容:

CLUSTER重写一个表,以使这些行在物理上按索引的逻辑顺序在磁盘上 排序。在一个块内,当数据位于共享缓冲区中时,该顺序将保留(因为该块被原样复制到内存中)。但是,不同的表块不会放在彼此靠近或以任何特定顺序排列的共享缓冲区中。

此想法是确保访问多于一行的索引扫描只需要从磁盘中读取尽可能少的表块,并按顺序读取。在内存中,是否按顺序读取块都没有关系。