• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PostgreSQL缓存详述

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

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: 异步获取本文来源gao@!dai!ma.com搞$$代^@码!网!数据块到操作系统缓存中,而不是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

补丁附加邮件地址

[email protected]

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 或者

yum install dstat文档:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PostgreSQL缓存详述

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址