• 对象文件系统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_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42), 64-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/16441 |       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/16441 |         4096 |        88496 |        186428
    (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/16441 |       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/16441 |         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/16441 |       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/16441 |         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/16441 |         4096 |        186460 |            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/16441 |         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/16441 |         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/16441 |       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/16441 |       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

    文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
    应聘者:JAVA
    面试官:知道什么叫类么
    应聘者:我这人实在,工作努力,不知道什么叫累
    面试官:知道什么是包?
    应聘者:我这人实在 平常不带包 也不用公司准备了
    面试官:知道什么是接口吗?
    应聘者:我这个人工作认真。从来不找借口偷懒
    面试官:知道什么是继承么
    应聘者:我是孤儿没什么可以继承的
    面试官:知道什么叫对象么?
    应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
    面试官:知道多态么?
    应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

  • 相关阅读:
    【转】使用scipy进行层次聚类和k-means聚类
    spark wordcont Spark: sortBy和sortByKey函数详解
    scala akka通信机制
    redis AOF 和RDB
    java虚拟机学习
    快速排序,一个爱情故事-java版
    Caused by: java.io.IOException: Added a key not lexically larger than previous.
    java.io.IOException: No FileSystem for scheme: hdfs
    " java.lang.NoSuchFieldError: HBASE_CLIENT_PREFETCH_LIMIT
    用户活跃度分析
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3067564.html
Copyright © 2020-2023  润新知