postgreSQL pgfincore introduces

Jun 07, 2016 pm 02:58 PM
introduce postgresql

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_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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL と PostgreSQL: パフォーマンスの比較と最適化のヒント MySQL と PostgreSQL: パフォーマンスの比較と最適化のヒント Jul 13, 2023 pm 03:33 PM

MySQL と PostgreSQL: パフォーマンスの比較と最適化のヒント Web アプリケーションを開発する場合、データベースは不可欠なコンポーネントです。データベース管理システムを選択する場合、MySQL と PostgreSQL の 2 つが一般的な選択肢となります。これらはどちらもオープンソースのリレーショナル データベース管理システム (RDBMS) ですが、パフォーマンスと最適化にはいくつかの違いがあります。この記事では、MySQL と PostgreSQL のパフォーマンスを比較し、最適化のヒントをいくつか紹介します。 2 つのデータベース管理を比較したパフォーマンスの比較

MySQL と PostgreSQL: Web 開発のベスト プラクティス MySQL と PostgreSQL: Web 開発のベスト プラクティス Jul 14, 2023 pm 02:34 PM

MySQL と PostgreSQL: Web 開発のベスト プラクティス はじめに: 現代の Web 開発の世界では、データベースは不可欠なコンポーネントです。データベースを選択する場合、一般的な選択肢は MySQL と PostgreSQL です。この記事では、Web 開発で MySQL と PostgreSQL を使用するためのベスト プラクティスについて説明し、いくつかのコード例を示します。 1. 適用可能なシナリオ MySQL は、ほとんどの Web アプリケーション、特に高いパフォーマンス、スケーラビリティ、使いやすさを必要とするアプリケーションに適しています。

Go 言語でデータベース関数を学習し、PostgreSQL データの追加、削除、変更、クエリ操作を実装します。 Go 言語でデータベース関数を学習し、PostgreSQL データの追加、削除、変更、クエリ操作を実装します。 Jul 31, 2023 pm 12:54 PM

Go 言語でデータベース関数を学習し、PostgreSQL データの追加、削除、変更、クエリ操作を実装する現代のソフトウェア開発において、データベースは不可欠な部分です。 Go 言語は強力なプログラミング言語として、データベースの追加、削除、変更、クエリ操作を簡単に実装できる豊富なデータベース操作関数とツールキットを提供します。この記事では、Go言語でデータベース機能を学び、実際の運用でPostgreSQLデータベースを利用する方法を紹介します。ステップ 1: 各データベースに Go 言語でデータベース ドライバーをインストールする

Go での PostgreSQL の使用: 完全ガイド Go での PostgreSQL の使用: 完全ガイド Jun 18, 2023 am 09:28 AM

Go 言語は、Web サービスやバックエンド アプリケーションの構築に適した高速かつ効率的なプログラミング言語です。 PostgreSQL は、より高い信頼性、拡張性、データ セキュリティを提供するオープンソースのリレーショナル データベース管理システムです。この記事では、Go での PostgreSQL の使用について詳しく説明し、いくつかの実用的なコード例とヒントを提供します。 PostgreSQL のインストールとセットアップ まず、PostgreSQL をインストールしてセットアップする必要があります。公式ウェブサイトでご覧いただけます

MySQL と PostgreSQL: データ セキュリティとバックアップ戦略 MySQL と PostgreSQL: データ セキュリティとバックアップ戦略 Jul 13, 2023 pm 03:31 PM

MySQL と PostgreSQL: データ セキュリティとバックアップ戦略 はじめに: 現代社会では、データはビジネスと個人の生活に不可欠な部分になっています。データベース管理システムでは、データを損失や損傷から保護し、回復されたデータの信頼性と整合性を確保するために、データ セキュリティとバックアップ戦略が非常に重要です。この記事では、2 つの主流のリレーショナル データベース システム、MySQL と PostgreSQL のデータ セキュリティとバックアップ戦略に焦点を当てます。 1. データセキュリティ: (1) ユーザーの権利

PHP プログラミングで PostgreSQL データベースを使用するにはどうすればよいですか? PHP プログラミングで PostgreSQL データベースを使用するにはどうすればよいですか? Jun 12, 2023 am 09:27 AM

データベース技術の発展に伴い、データベース管理システムにもさまざまな選択肢があり、開発者はニーズや好みに応じて最適なデータベースを選択できます。高度なオープンソース リレーショナル データベース システムとして、PostgreSQL は開発者によってますます注目され、使用されています。では、PHP プログラミングで PostgreSQL データベースを使用するにはどうすればよいでしょうか? 1. PostgreSQL データベースのインストールと設定 PostgreSQL を使用する前に、PostgreSQL データベースをインストールして設定する必要があります。初め

MySQL と PostgreSQL: データベース クエリのパフォーマンスを最適化するには? MySQL と PostgreSQL: データベース クエリのパフォーマンスを最適化するには? Jul 12, 2023 pm 03:15 PM

MySQL と PostgreSQL: データベース クエリのパフォーマンスを最適化するには?概要: データベース クエリのパフォーマンスは、アプリケーションを開発する際の重要な考慮事項です。クエリのパフォーマンスが優れていると、アプリケーションの応答性とユーザー エクスペリエンスが向上します。この記事では、一般的に使用される 2 つのデータベース、MySQL と PostgreSQL に焦点を当てて、データベース クエリのパフォーマンスを最適化する方法をいくつか紹介します。データベース インデックスの最適化: データベース インデックスは、クエリのパフォーマンスを向上させる重要な要素です。インデックスを使用すると、データ検索が高速化され、クエリのスキャン時間が短縮されます。

データベースの容量計画とスケーリング: MySQL と PostgreSQL データベースの容量計画とスケーリング: MySQL と PostgreSQL Jul 12, 2023 pm 01:43 PM

データベースの容量計画と拡張: MySQL と PostgreSQL はじめに: インターネットの急速な発展とビッグデータ時代の到来により、データベースの容量計画と拡張の重要性がますます高まっています。 MySQL と PostgreSQL は 2 つの一般的なリレーショナル データベース管理システム (RDBMS) であり、データベース容量の計画と拡張において異なる特性と適用可能なシナリオを持っています。この記事では、2 つのデータベースを比較し、その違いを示すコード例をいくつか示します。 1.MySQ

See all articles