微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PgFincore 获取关系的当前状态在OS页面缓冲区中加载表或索引快照和还原表或索引或更多的OS页缓冲区状态 PostgreSQL 内存页管理函数

程序名称:PgFincore 获取关系的当前状态在OS页面缓冲区中加载表或索引快照和还原表或索引或更多的OS页缓冲区状态

授权协议: BSD

操作系统: 跨平台

开发语言: C/C++

PgFincore 获取关系的当前状态在OS页面缓冲区中加载表或索引快照和还原表或索引或更多的OS页缓冲区状态 介绍

PgFincore 包含一组用于管理 Postgresql 内存中页面函数

使用Postgresql,每个表或索引通常都分成1GB的段,并且每个段都分为内存中的页面文件系统的块。

这些功能使您可以知道某个关系中的哪个磁盘块以及多少磁盘块在操作系统的页面缓存中。它可以将结果提供为VarBit,并可以存储在表中。然后,使用此表,由于流复制,甚至在其他服务器中,也可以为该关系的每个块恢复页面缓存状态。

其他功能用于在整个关系(每个段)上设置 POSIX_FADVISE 标志。比较有用的可能是 WILLNEEDDONTNEED
,它们分别从页面缓存中推入和弹出关系的每个段。

至少使用表名或索引名(或oid)作为参数调用每个函数,并遍历关系的每个段。

安装

从源代码

make clean
make
su
make install

对于Postgresql> = 9.1,登录数据库并:

mydb=# CREATE EXTENSION pgfincore;

对于其他发行版,请从sql脚本创建函数(它应该在contrib目录中):

psql mydb -f pgfincore.sql

PgFincore还随附Debian脚本来构建您自己的软件包:

aptitude install debhelper postgresql-server-dev-all postgresql-server-dev-9.1
# or postgresql-server-dev-8.4|postgresql-server-dev-9.0
make deb
dpkg -i ../postgresql-9.1-pgfincore_1.1.1-1_amd64.deb

PgFincore 在http://yum.postgresql.org/上用于 RPM
打包 。PgFincore 在http://pgapt.debian.net/上用于
debian 打包。

以下是一些用法示例。如果您想了解更多详细信息,请访问Documentation_

获取关系的当前状态

可能有用:

cedric=# select * from pgfincore('pgbench_accounts');
      relpath       | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit | pages_dirty | group_dirty 
--------------------+---------+--------------+--------------+-----------+-----------+---------------+---------+-------------+-------------
 base/11874/16447   |       0 |         4096 |       262144 |    262144 |         1 |         81016 |         |           0 |           0
 base/11874/16447.1 |       1 |         4096 |        65726 |     65726 |         1 |         81016 |         |           0 |           0
(2 rows)

Time: 31.563 ms

在OS页面缓冲区中加载表或索引

您可能希望尝试在OS页面缓存中保留一个表或索引,或者在执行众所周知的大查询之前减少表的装载时间(减少查询时间)。

为此,只需执行以下查询

cedric=# select * from pgfadvise_willneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free 
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |        169138
 base/11874/16447.1 |         4096 |        65726 |        103352
(2 rows)

Time: 4462,936 ms
  • os_page_size 报告页面大小为4KB。
  • rel_os_pages 列是指定文件的页数。
  • os_pages_free 是内存(用于缓存)中的可用页数。

快照和还原表或索引(或更多)的OS页缓冲区状态

您可能希望像执行快照一样将表或索引还原到OS页面缓存中。例如,如果您必须重新引导服务器,则Postgresql启动时,第一个查询可能会变慢,因为Postgresql或OS都没有在各自的缓存中包含有关这些第一个查询所涉及的关系的页面

执行快照和还原非常简单:

-- Snapshot
cedric=# create table pgfincore_snapshot as
cedric-#   select 'pgbench_accounts'::text as relname,*,Now() as date_snapshot
cedric-#   from pgfincore('pgbench_accounts',true);

-- Restore
cedric=# select * from pgfadvise_loader('pgbench_accounts', 0, true, true,
                       (select databit from  pgfincore_snapshot
                        where relname='pgbench_accounts' and segment = 0));
     relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+----------------
 base/11874/16447 |         4096 |         80867 |       262144 |              0
(1 row)

Time: 35.349 ms
  • pages_loaded 列报告已将多少页读取到内存中(它们可能已经存储在备忘录中)
  • pages_unloaded 列报告从内存中删除了多少页(它们可能尚未存储在备忘录中);

PgFincore 获取关系的当前状态在OS页面缓冲区中加载表或索引快照和还原表或索引或更多的OS页缓冲区状态 官网

https://github.com/klando/pgfincore

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐