注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL 9.4 : pg_prewarm 数据缓存预加载模块  

2014-05-19 11:45:19|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       重启数据库后, 数据库缓存将被清空, 应用程序需要从硬盘读数据, 在开始的一段时间内, 会影响一定的性能; 当然, 之前有 pgfincore 工具,可以将一些访问频繁的表预先加载到 OS 缓存, 我在之前的 blog 提到过,具体参考 pgfincore: cache data to OS cache  ,  9.4 之后, PostgreSQL 提供 pg_prewarm 模块, 可以将数据预先加载到数据库中.
      
       
 关于 pg_prewarm
       
        PostgreSQL 9.4 开始支持 pg_prewarm 模块,  pg_prewarm 模块可以将数据预先加载到数据库缓存,也可以预先加载到操作系统缓存.
            
       
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

备注: regclass 参数为数据库对像,通常情况为表名; modex 参数指加载模式,可选项有 'prefetch', 'read','buffer', 默认为 'buffer' 具体稍后介绍;  fork 表示对像模式,可选项有 'main', 'fsm', 'vm', 默认为 'main', first_block 表示开始 prewarm 的数据块,last_block 表示最后 prewarm 的数据块.

pg_prewarm 的加载模式

     mode  参数指加载模式,可选项有 'prefetch', 'read','buffer', 默认为 'buffer'.
  •      prefetch: 异步地将数据预加载到操作系统缓存;
  •      read: 最终结果和 prefetch 一样,但它是同步方式,支持所有平台.
  •      buffer: 将数据预加载到数据库缓存
     

二  pg_prewarm  演示
--2.1 安装 pg_prewarm

[pg94@db1 ~]$ psql francs
psql (9.4beta1)
Type "help" for help.

francs=# create extension pg_prewarm;
CREATE EXTENSION


--2.2 创建测试表

francs=> create table test_pre (id int4,name character varying(64),creat_time timestamp(6) without time zone); 
CREATE TABLE

francs=> insert into test_pre select generate_series(1,100000),generate_series(1,100000)|| '_pre',clock_timestamp(); 
INSERT 0 100000

francs=> select pg_size_pretty(pg_relation_size('test_pre'));                                                       
 pg_size_pretty 
----------------
 5096 kB
(1 row)


--2.3 加载数据到数据库缓存

francs=> select pg_prewarm('test_pre','buffer');
 pg_prewarm 
------------
        637
(1 row)

francs=> select current_setting('block_size');
 current_setting 
-----------------
 8192
(1 row)

francs=> select 637*8;
 ?column? 
----------
     5096
(1 row)

备注:   pg_prewarm 函数返回的是加载后的数据块数,这里返回的是 637 个块, 我设置的数据库块大小为 8 k. 如果表比较大, 也可以指定表的 block 范围.


三 总结

   pg_prewarm 本文没做太多的测试,仅介绍用法, pg_prewarm 适合数据库需要重启的情况, 个人觉得特别适合加载访问频繁的小表.
 
   
四 参考


  评论这张
 
阅读(1648)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017