视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
postgreSQLpgfincoreintroduces
2020-11-09 16:07:04 责编:小采
文档


postgreSQL pgfincore introduces pgfincore 和shared buffer不同,是OS层面的缓存,可以把大对象缓存到OS的cache里,其实就是内存,所以机器的内存配置越大越好,至于oracle是缓存到buffer_pool_keep,可以手工刷出,不过这个是database的缓存,和pg的share

postgreSQL pgfincore introduces

pgfincore 和shared buffer不同,是OS层面的缓存,可以把大对象缓存到OS的cache里,其实就是内存,所以机器的内存配置越大越好,至于oracle是缓存到buffer_pool_keep,可以手工刷出,不过这个是database的缓存,和pg的shared buffer同理。这里就不再详细介绍。

1.下载wget http://pgfoundry.org/frs/download.php/3186/pgfincore-v1.1.1.tar.gz

2.解压下载的安装包tar -zxvf pgfincore-v1.1.1.tar.gz

3.复制解压后的目录到pg源代码目录/contrib

4.安装:

postgres用户:

make clean

make

su - root

source /home/postgres/.bash_profile

make install

根据READ.rst

For PostgreSQL >= 9.1, log in your database and::

mydb=# CREATE EXTENSION pgfincore;

For other release, create the functions from the sql script (it should be in

your contrib directory)::

psql mydb -f pgfincore.sql

postgres=# select version();

version

---------------------------------------------------

PostgreSQL 9.1.2 on x86_-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42), -bit

postgres=# CREATE EXTENSION pgfincore;

CREATE EXTENSION

postgres=# select * from pg_extension ;

extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition

----------------+----------+--------------+----------------+------------+-----------+--------------

plpgsql | 10 | 11 | f | 1.0 | |

pg_buffercache | 10 | 2200 | t | 1.0 | |

pgfincore | 10 | 2200 | t | 1.1.1 | |

pgfincore使用:

pgfincore 对象的cache情况

pgfadvise_willneed 将对象刷入cache

pgfadvise_dontneed 将对象刷出cache

pgfadvise_loader 直接和page cache交互,加载,卸载页面

pgsysconf 操作系统的cache情况

pgsysconf_pretty同上,只不过输更易懂,带上了单位。

postgres=# \d t

Table "public.t"

Column | Type | Modifiers

--------+---------+-----------------------------------------------

s | integer | not null default nextval('t_s_seq'::regclass)

i | integer |

postgres=# insert into t(i) values (generate_series(1,10000000));

INSERT 0 10000000

postgres=# select pg_size_pretty(pg_relation_size('t'));

pg_size_pretty

----------------

346 MB

当前文件系统的使用情况:pgsysconf(),pgsysconf_pretty()

postgres=# select * from pgsysconf();

os_page_size | os_pages_free | os_total_pages

--------------+---------------+----------------

4096 | 182787 | 2044328

postgres=# select * from pgsysconf_pretty();

os_page_size | os_pages_free | os_total_pages

--------------+---------------+----------------

4096 bytes | 721 MB | 7986 MB

(1 row)

表t的使用情况:pgfincore

postgres=# select * from pgfincore('t');

relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit

------------------+---------+--------------+--------------+-----------+-----------+---------------+---------

base/12699/141 | 0 | 4096 | 88496 | 88496 | 1 | 181767 |

os_page_size:文件系统页大小

rel_os_pages:占用文件系统页数量

pages_mem:有多少文件系统页在系统cache

刷入cache:pgfadvise_willneed()

postgres=# select * from pgfadvise_willneed('t');

relpath | os_page_size | rel_os_pages | os_pages_free

------------------+--------------+--------------+---------------

base/12699/141 | 4096 | 88496 | 1828

(1 row)

postgres=# select * from pgfincore('t');

relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit

------------------+---------+--------------+--------------+-----------+-----------+---------------+---------

base/12699/141 | 0 | 4096 | 88496 | 88496 | 1 | 186397 |

(1 row)

刷出cache:

postgres=# select * from pgfadvise_dontneed('t');

relpath | os_page_size | rel_os_pages | os_pages_free

------------------+--------------+--------------+---------------

base/12699/141 | 4096 | 88496 | 275021

(1 row)

postgres=# select * from pgfincore('t');

relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit

------------------+---------+--------------+--------------+-----------+-----------+---------------+---------

base/12699/141 | 0 | 4096 | 88496 | 0 | 0 | 275052 |

(1 row)

pgfadvise_loader:

postgres=# select * from pgfadvise_loader('t', 0, true, true, B'111000');

relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded

------------------+--------------+---------------+--------------+----------------

base/12699/141 | 4096 | 186626 | 3 | 3

(1 row)

loading:

postgres=# select * from pgfadvise_loader('t', 0, true, false, B'111000');

relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded

------------------+--------------+---------------+--------------+----------------

base/12699/141 | 4096 | 1860 | 3 | 0

(1 row)

unloading:

postgres=# select * from pgfadvise_loader('t', 0, false, true, B'111000');

relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded

------------------+--------------+---------------+--------------+----------------

base/12699/141 | 4096 | 186557 | 0 | 3

(1 row)

pgfadvise_NORMAL

pgfadvise_SEQUENTIAL

pgfadvise_RANDOM

这几个可以指定当前内存的属性,正常,顺序,还是随机。

快照与恢复:

做快照:

create table pgfincore_snapshot as

select 't'::text as relname,*,now() as date_snapshot

from pgfincore('t',true);

应用快照:

select * from pgfadvise_loader('t', 0, true, true,

(select databit from pgfincore_snapshot

where relname='t' and segment = 0));

relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded

------------------+--------------+---------------+--------------+----------------

base/12699/141 | 4096 | 186259 | 88490 | 6

(1 row)

postgres=# select * from pgfincore('t');

relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit

------------------+---------+--------------+--------------+-----------+-----------+---------------+---------

base/12699/141 | 0 | 4096 | 88496 | 88490 | 2 | 186097 |

(1 row)

可以看到 88496 和88490,有几个页面是刷出cache,所以不相等

select * from pgfadvise_willneed('t');

postgres=# select * from pgfincore('t');

relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit

------------------+---------+--------------+--------------+-----------+-----------+---------------+---------

base/12699/141 | 0 | 4096 | 88496 | 88496 | 1 | 186227 |

(1 row)

*PgFincore needs mincore() and POSIX_FADVISE.

*PgFincore has a limited mode when POSIX_FADVISE is not provided by the platform.

*PgFincore needs PostgreSQL >= 8.3

下载本文
显示全文
专题