————
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
申请创业报道 , 分享创业好点子 。 , 共同探讨创业新机遇!
- 在PostgreSQL中使用ltree处理层次结构数据的方法
- Postgresql限制用户登录错误次数的实例代码
- Postgresql设置远程访问的方法
- PostgreSQL用户登录失败自动锁定的处理方案
- PostgreSQL数据库中如何保证LIKE语句的效率
- 详解PostgreSQL提升批量数据导入性能的n种方法
- 红色印泥怎么能去除
- 滑雪服怎么洗
- 华为徐直军:预计2021年将有1亿台设备体验鸿蒙操作系统
- 白板怎么才能擦干净