pgFincore 1.2は、オペレーティングシステムのデータページキャッシュを監査および操作するためのPostgreSQL拡張機能です。拡張機能にはすでに7年間の使用の歴史があり、生産ニーズに対応する進化があります。
PostgreSQL9.6と互換性のある最新バージョン1.2をここからダウンロードしてください。
データキャッシュ
データページのキャッシュは、データ管理のいくつかのレベルで「自然に」行われる操作です。オブジェクトは単純です。ディスクに物理的に記録されたデータとユーザーへの復元の間に多数のレイヤーが重ねられています。現在、ほぼすべてのデータレイヤーには、読み取りおよび書き込みコマンドをより高速に提供するための抽象化があります。したがって、ハードドライブの大部分は、物理的な書き込みを遅らせる書き込みキャッシュと、将来の要求を予測してデータをより迅速に提供できる読み取りキャッシュを提供します。同等のシステムがSAN、RAIDカード、オペレーティングシステム、ソフトウェアなどに存在します。
もちろん、PostgreSQLには、書き込みと読み取りのための独自の管理システム、共有バッファがあります。 、pg_buffercache拡張機能で監査できます。
システムツールとpgFincoreを使用して、オペレーティングシステムのキャッシュを監査することができます。 これをPostgreSQLに移植します。
先読み
ほとんどのオペレーティングシステムは、先読みウィンドウを提供することでデータパスを最適化します。これにより、データをキャッシュして、アプリケーションにより迅速に提供します。 PostgreSQLには、システムレベルでこの動作を優先するためのいくつかの最適化が含まれており、effective_io_concurrencyオプションで同様の機能を備えています。
これらの最適化を容易にする1つの解決策は、POSIX_FADVISEシステムコールを使用することです。 再びpgFincore このソリューションをPostgreSQLに移植します。
pgFincore 1.2
したがって、この拡張機能により、次のことが可能になります。
- POSIXをサポートするシステム(Linux、BSDなど)のキャッシュ内のテーブルまたはインデックス(およびPostgreSQLで使用されるその他のファイル)の占有に関する正確な情報を取得するため。
- このキャッシュを操作するには:マップを作成し、後でまたは別のサーバーに復元します。
- posix_fadvise呼び出しを介してパスを最適化します。
pgFincoreを入手
ディストリビューションで利用可能なDebianおよびRedHatパッケージ、およびAptPGDGおよびRPMPGDGリポジトリ上のPostgreSQLの各バージョン。
そして、pgfincoregitリポジトリのソース。
助けが必要ですか?
コミュニティサポートに加えて、2ndQuadrantに連絡することもできます。
使用例
セットアップ
$ sudo apt-get install postgresql-9.6-pgfincore $ psql -c 'CREATE EXTENSION pgfincore;'
システム情報
# select * from pgsysconf_pretty(); os_page_size | os_pages_free | os_total_pages --------------+---------------+---------------- 4096 bytes | 314 MB | 16 GB
ランダムウォークを最適化する(先読みウィンドウを縮小する)
# select * from pgfadvise_random('pgbench_accounts_pkey'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/24980 | 4096 | 2 | 1853808
シーケンシャルトラバーサルを最適化する(先読みウィンドウを大きくする)
# select * from pgfadvise_sequential('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/25676 | 4096 | 3176 | 1829288
キャッシュ監査
# select * from pgfincore('pgbench_accounts'); relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit --------------------+---------+--------------+--------------+-----------+-----------+---------------+--------- base/11874/16447 | 0 | 4096 | 262144 | 3 | 1 | 408444 | base/11874/16447.1 | 1 | 4096 | 65726 | 0 | 0 | 408444 |
テーブルをメモリにロードする
# select * from pgfadvise_willneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 80650 base/11874/16447.1 | 4096 | 65726 | 80650
テーブルのキャッシュをクリアする
# select * from pgfadvise_dontneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 342071 base/11874/16447.1 | 4096 | 65726 | 408103
キャッシュされたページを復元する
ここでは、メモリからロードおよびアンロードするページを表すビット文字列タイプのパラメータを使用します。
# select * from pgfadvise_loader('pgbench_accounts', 0, true, true, B'101001'); -- Varbit décrivant les pages à manipuler relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded ------------------+--------------+---------------+--------------+---------------- base/11874/16447 | 4096 | 408376 | 3 | 3
注:デモの場合、上記で処理されるデータページは6つだけで、1つはページをロードし、0つはページをアンロードします。