PostgreSQL缓存详述


目录:

pg_buffercache
pgfincore
pg_prewarm
dstat
Linux ftools
使用pg_prewarm预加载关系/索引:
pgfincore 输出:
怎样刷新在操作系统缓存中的关系/索引 ?
使用pg_prewarm的range功能预加载随机块.

PostgreSQL 的详细介绍:请点这里
PostgreSQL 的下载地址:请点这里

推荐阅读:

Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)环境的配置与安装

缓存…. !!, 它很难在一篇文章中解释清楚。但是我会努力分享我从Heikki, Robert Haas, Bruce Momjian那里学到的知识。在PostgreSQL里有两层:PG共享缓冲和操作系统页面缓存,任何读写都会通过操作系统缓存(迄今为止还没有其它途径)。Postgres把数据写在操作系统页面缓存,用户觉得数据好像回写到了磁盘,之后操作系统缓存才会写到对应的物理磁盘位置。PG共享缓冲无法控制系统页面缓存,甚至连系统缓存是什么都不知道。所以,Postgres DBA或者专家给出的大多数建议都是更快的磁盘读写或者更好的缓存。

PostgreSQL的缓存/缓冲和其它数据库十分相像并且十分复杂。因为我有Oracle和mindset背景,所以我使用怎么样/什么时候/什么/为什么等提问方式,关于数据库的缓冲缓存,固定的缓冲,刷新数据库缓存,以及预加载数据库等方面,我都是从这种方式获得答案的,然而这种方式有点与众不同。尽管我的问题很烦人,但是他们总是耐心的回答,使我明白扩展我的知识,反过来,你才能阅读这篇博文…  ..

在一些学习上,我画了一幅Postgres中数据在内存和磁盘之间传递的,以及一些重要的工具和Robert Hass提供的新补丁(pg_prewarm).


pg_buffercache
它是一个contrib模块,它会告诉你什么是PostgreSQL缓存。像下面安装:

postgres=# CREATE EXTENSION pg_buffercache
pgfincore
它有一个显示数据在操作系统页面缓存中信息的功能。Pgfincore和pg_buffercache联合会十分方便的。现在,它可以同时获得PG缓冲和操作系统页面缓存信息。感谢Cerdic Villemain。Pgfincore的主干是fadvise,fincore,它俩是linux ftools。你可以使用源码安装fincore/fadvise。你可以使用pgfincore contrib模块或者ftools,都会产生同样的结果。我试了两者,它们都十分简单优秀。

安装:

下载最新版本:

http://pgfoundry.org/frs/download.php/3186/pgfincore-v1.1.1.tar.gz使用root用户:

export PATH=/usr/local/pgsql91/bin:$PATH    //设置执行pg_config的路径
tar -xvf pgfincore-v1.1.1.tar.gz
cd pgfincore-1.1.1
make clean
make
make install现在连接到PG,运行下面的命令:

postgres=# CREATE EXTENSION pgfincore;
pg_prewarm
预加载关系/索引到PG缓存中,在PostgreSQL中可能吗?当然可以了,感谢Robert Hass,他提交一些补丁到社区,期待它能够在PG 9.2或者PG 9.3中可行。然而,你可以使用这个补丁在PG 9.1做一些测试。
pg_prewarm
有三种模式:

PREFETCH: 异步获取数据块到操作系统缓存中,而不是PG缓冲(提示只是操作系统缓存)
READ:读取所有的数据块到虚拟缓存中,然后写到操作系统缓存中(提示只是操作系统缓存)
BUFFER:读取所有的或者一些数据块到数据库缓冲中。
安装:

我把pg_prewarm补丁加入到PG源码安装中,你需要调整你的每步安装。

解压PG源码路径: /usr/local/src/postgresql-9.1.3
PG安装路径: /usr/local/pgsql91
所有下载路径: /usr/local/src

注意:应用pg_prewarm补丁之前安装PG

1. 下载补丁,放在/usr/local/src

 

http://archives.postgresql.org/pgsql-hackers/2012-03/binRVNreQMnK4.bin

补丁附加邮件地址


http://archives.postgresql.org/message-id/CA+TgmobRrRxCO+t6gcQrw_dJw+Uf9ZEdwf9beJnu+RB5TEBjEw@mail.gmail.com

2. 在下载之后,到PG源码目录,然后执行下面几步。

# cd /usr/local/src/postgresql-9.1.3
# patch -p1 < ../pg_prewarm.bin        (在下载之后我重命名了pg_prewarm)
# make -C contrib/pg_prewarm
# make -C contrib/pg_prewarm instal3. 上面的命令会在$PGPATH/contrib/extension目录里创建文件。现在准备添加contrib模块了。

postgres=# create EXTENSION pg_prewarm;
CREATE EXTENSION
postgres=# \dx
                          List of installed extensions
      Name      | Version |  Schema  |              Description
----------------+---------+------------+----------------------------------------
 pg_buffercache | 1.0    | public    | examine the shared buffer cache
 pg_prewarm    | 1.0    | public    | prewarm relation data
 pgfincore      | 1.1.1  | public    | examine and manage the os buffer cache
 plpgsql        | 1.0    | pg_catalog | PL/pgSQL procedural language
(4 rows)文档:

/usr/local/src/postgres-9.1.3/doc/src/sqml
[root@localhost sgml]# ll pgpre*
-rw-r--r-- 1 root root 2481 Apr 10 10:15 pgprewarm.sgml
dstat
它是vmstat, netstat, top等工具的组合到一起成了一个”dstat”linux命令。当数据库表现不正常时,从操作系统级别了解语句,我们会打开好几个终端来显示进程,内存,磁盘读写,网络信息,但是在这些窗口切换是十分痛苦的。所以,dstat有几个选项来帮助显示所有的命令在一个输出窗口中。

安装:
Dstat下载连接:(RHEL 6)


wget http://pkgs.repoforge.org/dstat/dstat-0.7.2-1.el6.rfx.noarch.rpm或者

yum install dstat文档:http://dag.wieers.com/home-made/dstat/

  • 1
  • 2
  • 下一页

相关内容