Global Meta Cache機能は、メタキャッシュを共有メモリ上にキャッシュする機能です。共有メモリ上のメタキャッシュをGlobal Meta Cache (GMC)と呼びます。
FUJITSU Enterprise Postgres 11以前ではメタキャッシュをプロセスごとのメモリにキャッシュしていたため、大量のデータベースや多数のコネクションを使用する環境では、メモリ使用量が著しく増加するといった課題がありました。Global Meta Cache機能を使用することで、共有メモリ上のメタキャッシュが共有でき、システム全体のメモリ使用量の削減につながります。
注意
本機能は、Advanced Editionのみで使用できます。
メタキャッシュ
クエリを処理するには、クエリのパース、プラン作成、プラン実行などの処理が必要となります。これらの一連の処理を実行するためにシステムカタログにアクセスします。一度アクセスしたシステムカタログのタプルは、プロセスごとのメモリにキャッシュしています。直接的な定義は、システムカタログの1つのタプルです。各プロセスは、毎回システムカタログの必要なタプルを検索する代わりに、メタキャッシュを検索することで高速なクエリ処理を実現しています。
また、アクセスするテーブル数およびカラム数に比例してメタキャッシュの使用量が増加します。プロセスごとにキャッシュされるため、コネクション数に比例してシステム全体のメタキャッシュの使用量が増加します。
Global Meta Cache機能のアーキテクチャ
Global Meta Cache機能のアーキテクチャを解説します。
Global Meta Cache機能がオンの場合は、プロセスごとのメタキャッシュを共有メモリ上のGMC領域にキャッシュします。各プロセスのメモリ上には、GMC領域を参照するための情報およびプロセス固有の作業情報がキャッシュされます。各プロセスのメタキャッシュを検索し、取得した参照情報に基づいてGMCにアクセスします。プロセスのメモリ上に参照情報がない場合は、GMC領域を検索します。GMC領域にも該当のメタキャッシュがない場合は、システムカタログにアクセスしてメタキャッシュを作成します。
また、メタキャッシュの共有化によりデータの整合性が失われることはありません。トランザクション実行中にシステムカタログやテーブル定義が変更された場合、キャッシュの削除や作成はそのトランザクションを実行しているプロセスに閉じて処理されます。そのトランザクションがコミットした後に、GMC領域のキャッシュが削除されます。GMC領域のキャッシュ削除時に他のトランザクションがそのキャッシュを参照中の場合は、参照がなくなるまで削除が遅延されます。コミット後のトランザクションは、古いキャッシュを参照せずに新しいキャッシュを参照します。
参照
Global Meta Cache機能はデフォルトで無効になっています。この機能を導入するかどうかの判断方法および使用方法は、“運用ガイド”の“Global Meta Cache機能”を参照してください。