跳转到主要内容

预热

PostgreSQL 启动后,表和索引只有在首次被访问时才会从存储加载到缓冲池中。使用专用预热函数可以将索引的热数据部分提前加载到内存中。

PostgreSQL 启动后,表和索引只有在首次被访问时才会从存储加载到缓冲池(buffer pool)中。随着查询的不断执行,索引中被频繁访问的部分会自然地缓存在缓冲池里。然而,在执行最初的几批查询时,由于缓冲池为空,查询速度往往较慢。

PostgreSQL 扩展 pg_prewarm 提供了 pg_prewarm 函数,可以在一定程度上解决这一问题。在 PostgreSQL 启动后,您只需向该函数传入索引名称,它就会将索引从存储加载到缓冲池中。

SELECT pg_prewarm('items_pkey');

不过,这种方法只有在缓冲池远大于索引大小时才有效。对于向量索引而言,索引大小往往远超内存容量。向量索引在设计上将索引数据分为两部分:体量较小的热数据部分(hot portion)和体量庞大的冷数据部分(cold portion)。向量索引只需要将热数据部分保留在内存中即可获得理想的性能。因此,VectorChord 提供了专用的预热函数,仅将索引的热数据部分加载到内存中。

SELECT vchordrq_prewarm('items_embedding_idx');

即使索引大小远大于内存容量,该函数依然能够很好地发挥作用。

参考

函数(vchordrq)

vchordrq

vchordrq_prewarm

  • 说明:该函数通过将 vchordrq 索引的热数据加载到缓冲池中来预热索引。
  • 返回值:text
  • 参数:
    • regclass,vchordrq 索引的对象标识符
  • 示例:
    • SELECT vchordrq_prewarm('items_embedding_idx')

函数(vchordg)

vchordg

vchordg_prewarm

since v0.5.0
  • 说明:该函数通过将 vchordg 索引的热数据加载到缓冲池中来预热索引。
  • 返回值:text
  • 参数:
    • regclass,vchordg 索引的对象标识符
  • 示例:
    • SELECT vchordg_prewarm('items_embedding_idx')