• 技术文章 >数据库 >PostgreSQL

    PostgreSQL怎么提前缓存数据

    月亮邮递员月亮邮递员2020-03-28 13:52:15原创2730

    PostgreSQL怎么提前缓存数据

    预热功能,使用pg_prewarm函数,方便的将数据缓存至内存中。

    这个功能不是自带的,是存在在扩展包中,所以要使用前需要先添加扩展。

    pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', first_block int8 default null, last_block int8 default null) RETURNS int8

    第一个参数是预热的relation。

    第二个参数是要使用预热的方法

    第三个参数是relation fork被预热

    第四个参数是预热的第一个块号

    第五个参数是预热的最后一个块号

    返回值是prewarm块的数量。

    预热方法有三种:

    1、对操作系统发出异步prefetch请求

    2、读取块的请求范围,但可能会较慢

    3、缓冲区将请求的块范围(执行的查询)读入数据库缓冲区缓存中。

    注意,使用这些方法中的任何一种,试图预热更多的块而不是缓存的操作系统——当使用预取或读取时,或使用PostgreSQL在使用缓冲器时可能会导致较低编号的块被释放,因为较高编号的块被读入。预热数据也没有对缓存驱逐的特殊保护,因此其他系统活动可能会在读取后不久将新的预热块驱逐出去;反之,预热也可能从高速缓存中驱逐其他数据。由于这些原因,预热通常在启动时最有用,当缓存大部分为空时。

    操作,实验环境:

    CentOS 7 + PG 10.1

    创建extension

    mytest=# create extension pg_prewarm ;
    CREATE EXTENSION

    在这个实验中,我们需要借助pg_buffercache 来查看内存中的变化。

    mytest=# create extension pg_buffercache ;
    CREATE EXTENSION

    我们重启一下pg

    service postgresql-10 restart

    查看内存信息

    mytest=# select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'test01');
    count
    -------
    0
    (1 row)
    mytest=# select pg_prewarm('test01','buffer','main') ;
    pg_prewarm
    ------------
    2041
    (1 row)
    mytest=# select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'test01');
    count
    -------
    2041
    (1 row)

    说明表已经被缓存到内存中。

    推荐:postgresql教程

    专题推荐:postgresql 缓存数据
    上一篇:PostgreSQL怎么延时执行 下一篇:PostgreSQL怎么切换数据库

    相关文章推荐

    • PostgreSQL如何判断字段是否存在• PostgreSQL怎么延时执行

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网