PostgreSQL怎么提前缓存数据
2023-04-18 14:24:31 时间
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教程
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击