Heim  >  Artikel  >  Datenbank  >  PostgreSQL缓存详述

PostgreSQL缓存详述

WBOY
WBOYOriginal
2016-06-07 17:30:401208Durchsuche

PostgreSQL的缓存/缓冲和其它数据库十分相像并且十分复杂。因为我有Oracle和mindset背景,所以我使用怎么样/什么时候/什么/为什么

目录:

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,都会产生同样的结果。我试了两者,它们都十分简单优秀。

安装:

下载最新版本:

使用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

 

补丁附加邮件地址


+TgmobRrRxCO+t6gcQrw_dJw+Uf9ZEdwf9beJnu+RB5TEBjEw@mail.gmail.com

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

# cd /usr/local/src/postgresql-9.1.3
# patch -p1 # 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 或者

yum install dstat文档:

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn