PostgreSQL提前缓存数据的方法
小编给大家分享一下PostgreSQL提前缓存数据的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
PostgreSQL怎么提前缓存数据
预热功能,使用pg_prewarm函数,方便的将数据缓存至内存中。
这个功能不是自带的,是存在在扩展包中,所以要使用前需要先添加扩展。
pg_prewarm(regclass,modetextdefault'buffer',forktextdefault'main',first_blockint8defaultnull,last_blockint8defaultnull)RETURNSint8
第一个参数是预热的relation。
第二个参数是要使用预热的方法
第三个参数是relation fork被预热
第四个参数是预热的第一个块号
第五个参数是预热的最后一个块号
返回值是prewarm块的数量。
预热方法有三种:
1、对操作系统发出异步prefetch请求
2、读取块的请求范围,但可能会较慢
3、缓冲区将请求的块范围(执行的查询)读入数据库缓冲区缓存中。
注意,使用这些方法中的任何一种,试图预热更多的块而不是缓存的操作系统——当使用预取或读取时,或使用PostgreSQL在使用缓冲器时可能会导致较低编号的块被释放,因为较高编号的块被读入。预热数据也没有对缓存驱逐的特殊保护,因此其他系统活动可能会在读取后不久将新的预热块驱逐出去;反之,预热也可能从高速缓存中驱逐其他数据。由于这些原因,预热通常在启动时最有用,当缓存大部分为空时。
操作,实验环境:
CentOS 7 + PG 10.1
创建extension
mytest=#createextensionpg_prewarm;CREATEEXTENSION
在这个实验中,我们需要借助pg_buffercache 来查看内存中的变化。
mytest=#createextensionpg_buffercache;CREATEEXTENSION
我们重启一下pg
servicepostgresql-10restart
查看内存信息
mytest=#selectcount(*)frompg_buffercachewhererelfilenode=(selectrelfilenodefrompg_classwhererelname='test01');count-------0(1row)mytest=#selectpg_prewarm('test01','buffer','main');pg_prewarm------------2041(1row)mytest=#selectcount(*)frompg_buffercachewhererelfilenode=(selectrelfilenodefrompg_classwhererelname='test01');count-------2041(1row)
说明表已经被缓存到内存中。
看完了这篇文章,相信你对PostgreSQL提前缓存数据的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。