小程序制作平台网站设计平台 互联网品牌制作专家
关于A5客户收购GoogleAdsense带有搜索账户的相关事宜更多

软文发布平台资讯中心

PostgreSQL将数据加载到buffercache中操作方法

PostgreSQL将数据加载到buffercache中操作方法

  项目招商找A5 快速获取精准代理名单

我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在pg中将指定的数据加载到缓存中呢,这有点类似于Oracle的in-memory。

当然要注意并不是把数据加载到内存中就一定是好的,因为相较于磁盘,内存总是有限的,所以一帮我们只是在特殊场合下将需要的数据加载到内存中来加快访问的速度。

我们可以使用pg_prewarm插件来将指定的表加载到OS Buffer或者pg shared buffer中。

安装:

bill=# create extension pg_prewarm ;CREATE EXTENSION

性能测试:

构建测试表t1,t2,分别插入1000W条测试数据

bill=# create table t1(id int,info text);CREATE TABLEbill=# create table t2(id int,info text);CREATE TABLEbill=# insert into t1 select generate_series(1,10000000),md5(random()::text);INSERT 0 10000000bill=# insert into t2 select generate_series(1,10000000),md5(random()::text);INSERT 0 10000000

测试前先清空shared_buffer,可以使用下面sql查看shared_buffer使用情况:

安装pg_buffercache插件:

bill=# create extension pg_buffercache;CREATE EXTENSION

查询shared_buffer使用情况:

SELECT c.relname, count(*) AS buffersFROM pg_buffercache bINNER JOIN pg_class c ON b.relfilenode = pg_relation_filenode(c.oid) AND b.reldatabase IN (0, (SELECT oid FROM pg_databaseWHERE datname = current_database()))GROUP BY c.relnameORDER BY 2 DESC; relname | buffers-----------------------------------------+---------pg_attribute | 36pg_proc | 27pg_class | 15pg_operator | 14pg_depend_reference_index | 13pg_depend | 11pg_attribute_relid_attnum_index | 10pg_proc_proname_args_nsp_index | 9......

可以看到t1和t2表均不在shared_buffer中,我们来手动将t2表加载到shared_buffer中。

bill=# SELECT pg_prewarm('t2');pg_prewarm------------ 83334(1 row)

性能测试:

可以看到全表扫描t2表的性能要提升不少。

bill=# explain analyze select * from t1; QUERY PLAN------------------------------------------------------------------------------------------------------------------Seq Scan on t1 (cost=0.00..183334.80 rows=10000080 width=37) (actual time=0.060..772.902 rows=10000000 loops=1)Planning Time: 0.294 msExecution Time: 1044.922 ms(3 rows)

Time: 1045.722 ms (00:01.046)

bill=# explain analyze select * from t2; QUERY PLAN------------------------------------------------------------------------------------------------------------------Seq Scan on t2 (cost=0.00..183334.80 rows=10000080 width=37) (actual time=0.012..519.691 rows=10000000 loops=1)Planning Time: 0.280 msExecution Time: 790.607 ms(3 rows)

Time: 791.314 mspg_prewarm其它介绍:

下面主要介绍下pg_prewarm函数:

该函式的创建语句如下:

CREATE FUNCTION pg_prewarm(regclass,mode text default buffer,fork text default main,first_block int8 default null,last_block int8 default null)RETURNS int8AS MODULE_PATHNAME, pg_prewarmLANGUAGE C

参数如下:

regclass:要做prewarm的表名

mode:prewarm模式。prefetch表示异步预取到os cache;read表示同步预取;buffer表示同步读入PG的shared buffer

fork:relation fork的类型。一般用main,其他类型有visibilitymap和fsm

first_block & last_block:开始和结束块号。表的first_block=0,last_block可通过pg_class的relpages字段获得

RETURNS int8:函数返回pg_prewarm处理的block数目(整型)

可能有人会想:我直接将表select *全表查询一遍不就可以将数据加载到缓存中了嘛,为什么还需要使用pg_prewarm呢?因为对于大小超过shared_buffer/4的表进行全表扫描时,pg一般不会使用全部的shared_buffer,而是只使用很少一部分的shared_buffer。所以,将大表加载到缓存中不能用一个查询来直接实现的,而pg_prewarm正好可以满足这个需求。

文章来源:脚本之家

来源地址:https://www.jb51.net/article/209711.htm

尊敬的看官您对PostgreSQL将数据加载到buffercache中操作方法有什么看法呢?互联网品牌制作专家愿与您共同探讨!版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请加微信号oem365 举报,一经查实,本站将立刻删除。

上一篇: 在PostgreSQL中使用ltree处理层次结构数据的方法   返 回   下一篇:SQLite实现ifnotexist类似功能的操作

相关资讯

小程序应用场景 | 小程序解决方案 | 小程序案例 | 小程序应功能 | 软文发布资源 | 网站设计

酒店预约解决方案
酒店预约小程序走红网络,也是传统转型的重要变化
详情
投票解决方案
强大功能,傻瓜式管理,有效防止作弊刷票
详情
新零售解决方案
小程序是现在新零售的新方式,深度结合线上线下
详情
预约服务解决方案
预约到店小程序通过用户在线预约到店等
详情
企业官网解决方案
企业展示小程序主要展示企业信息、产品案例等
详情
教育培训解决方案
主要展示教育机构的课程、可在线预约与购买课程
详情
推广解决方案
可以让企业通过推广模式全面展示自己的产品
详情
到店解决方案
到店服务解决方案,主要是面向实体餐饮门店
详情

我们的服务是否能满足您的需求?

如果不能,请联系我们或给我们留言,我们收到后会第一时间联系您!感谢您对我们的关注!

粤公网安备 44200002005005号