————
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 ms
Execution 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 ms
Execution 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 int8
AS MODULE_PATHNAME, pg_prewarm
LANGUAGE 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
申请创业报道 , 分享创业好点子 。 , 共同探讨创业新机遇!
- 干细胞治疗糖尿病的依据是什么 干细胞2030年将治愈糖尿病
- 中医体检数据显示阳虚体质排榜首 阳虚长斑怎么调理好
- 女子回应穿防护服|女子回应穿防护服和3个阳康打麻将是怎么回事 日常防护应该如何做
- 请推荐最好的医院或医生 高血压即将被彻底治愈
- 在国外听说过拉卡维lacannavie 国内即将上市的帕金森新药
- 是否预示着癌症将被彻底攻克 美国停止cart免疫疗法
- 女子将布洛芬藏茶包|女子将布洛芬藏茶包里压最底层寄出是真的吗 布洛芬为什么如此抢手
- 俄罗斯松果蜂蜜怎么吃 什么蜂蜜适合做菜
- 四维彩超的数据怎么看 四维彩超检查什么的呢
- 孕妇能将红萝卜和虾一起吃吗 虾和胡萝卜能一起吃吗
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
