メタキャッシュの再生成がどのくらい行われているのかを観察することで、目標の性能を達成できない原因が、上限値の低さにあるのかを判断できます。
以下のメッセージから、キャッシュヒット率を次のように計算してください。
キャッシュヒット率 = キャッシュにヒットした回数 ÷ キャッシュを検索した回数
キャッシュのヒット率が、80%以上であれば、本機能が性能を阻害する主たる要因ではないでしょう。そうでなければ、上限値を上げて、性能が目標を達成できるかどうかを試してください。その際、リレーションキャッシュに配分の重点を移すことを最初に試みてください。SQLを実行するときには、カタログキャッシュを基にして生成したリレーションキャッシュを主に参照するので、リレーションキャッシュを多く残しておいた方が有利だからです。
カタログキャッシュ:catalog cache hit stats: search XX, hits YY
リレーションキャッシュ:relation cache hit stats: search XX, hits YY
(XX:キャッシュを検索した回数、YY:キャッシュにヒットした回数)
このメッセージは、トランザクションが終了した時に出力されます。ただし、頻繁に出力するとメッセージを出力すること自身によって性能が劣化してしまうので、以下のパラメータで出力間隔を調整することができます。
パラメータ名 | 説明 |
---|---|
pgx_cache_hit_log_interval | トランザクションが終了した時に、前にメッセージを出力してから本パラメータに設定した時間を経過していたならば、メッセージを出力します。 0を設定するとトランザクションが終了するたびにメッセージを出力します。-1を設定すると出力は無効となります。デフォルト値は10minです。 pgx_catalog_cache_max_size、pgx_relation_cache_max_sizeが無効に設定されている場合も、対応するキャッシュのメッセージ出力は無効となります。 サーバーに接続した直後には、ユーザー認証などのために、ユーザーアプリケーションからのリクエストの前に、小さなトランザクションが発生します。これらについてのヒット率を知ることには意味がないので、サーバーに接続してから、本パラメータに設定した時間が経過した後に開始したトランザクションの終了時にメッセージを出力します。 同じ理由で、0のような小さい値を設定すると、このような小さなトランザクションの終了に伴ってメッセージが出力されることがあります。 メッセージがどのトランザクションに対応しているかは、先頭に出力される情報から確認できます。この情報は、パラメータlog_line_prefixの設定により変わります。 |
例
postgresql.confでの設定例を示します。
pgx_cache_hit_log_interval= 30min