ページの先頭行へ戻る
Enterprise Postgres 15 運用ガイド

14.1.3 Local Meta Cache制限機能を有効にした際のキャッシュ削除

本機能有効時のキャッシュ戦略は、指定された上限値の範囲内で可能な限りキャッシュを保持することです。もし、新しいキャッシュを保持することで、上限値を超えるのであれば、参照の局所性を考慮して、参照されていない時間が最も長いキャッシュから順に削除します。

しかし、アクティブなトランザクションが使用しているキャッシュを削除することはできないので、1つのトランザクションで多数のキャッシュを使用する場合には、上限値を超えてキャッシュを保持することもあります。この場合には、トランザクションの終了時にすべてのキャッシュを削除します。これは、メモリを解放するために必要だからです。

PostgreSQLでは、メモリ獲得を高速に行うために、ある程度の大きさのメモリブロックをOSから獲得しておき、そのブロックから小さなメモリを切り出して使用します。メタキャッシュのためのメモリも同じように切り出します。そのため、メモリブロック全体に散りばめられたメタキャッシュをすべて破棄することで、メモリブロックをOSに返却することが可能になります。このようなことが発生すると、次のSQLの実行が、メタキャッシュの再作成ために遅くなります。そのため、機能の上限値には、少なくとも1つのトランザクションが使用するメタキャッシュのサイズよりも大きい値を設定しておくべきです。

メタキャッシュのサイズが上限値を超えた際は、以下のメッセージが出力されます。

WARNING: could not reduce Cat/RelCacheMemoryContext size to AA kilobytes, reduced to BB kilobytes
HINT: consider increasing the configuration parameter pgx_catalog/relation_cache_max_size

AA:上限値、BB:実際に使用されているメモリ量)

CatCacheMemoryContext、RelCacheMemoryContextはそれぞれカタログキャッシュ、リレーションキャッシュを保存するメモリ領域です。このメッセージが出力されたときは、上限値を増加させることを検討してください。

上限値を増やすことで、バックエンドプロセスによるメモリ消費量が許容値を超えるならば、1トランザクションでアクセスするテーブル数を減らすなど、実行するSQLを再考することや、使用されているメモリ量に合わせてメモリを増設することで対処する必要があります。