PostgreSQL PG14は、libpqを介したロギングを改善します

更新:2年2023月XNUMX日

PostgreSQL14はlibpqによるロギングを改善します

libpq関数は、アプリケーションサーバー/クライアント通信の可用性を追跡するためにPG14で拡張されました。 出力フォーマットを制御するための新しいオプションが追加されています。

背景

libpqはクライアントライブラリのXNUMXつであり、ユーザーはPQtrace関数を実行してクライアント/サーバー通信を記録できます。 この通信は、PGが使用する一種のプロトコル情報であり、メッセージタイプの識別子、メッセージの長さ、交換情報のメッセージ内容などが含まれます。

アプリケーション開発者は、このログを使用して、通信が期待どおりに実行されているかどうかを判断できます。 例として次のステートメントを使用します。

CREATE TABLESPACE regress_tblspacewith

LOCATION '/ home / postgres / src / test / regress / testtablespace'

WITH(random_page_cost = 3.0);

PG13でPQtraceを呼び出すアプリケーションは、次のタイプのログを指定されたファイルに出力します。

PG13のlibpqによって生成されたログ

現在のPGバージョンのPQtraceログ出力にはタイムスタンプが含まれていないため、遅いクエリを分析するための参照として使用できないことに注意してください。 さらに、メッセージ識別子、サーバー/クライアントメッセージの長さ、および出力コンテンツが別の行にあるため、信頼性が比較的低く、プロトコルメッセージの分析がより困難になります。 1とマークされたZとCは、プロトコルメッセージの識別子です。各識別子の意味を理解するには、マニュアルの「メッセージ形式」セクションを参照してください。

機能改善の概要

PG14では、PQtrace関数が改善され、出力ログが読みやすくなり、タイムスタンプが含まれるようになりました。 タイムスタンプの出力を制御するために、新しい関数PQsetTraceFlagsが追加されました。

ログ出力を改善する

PG14の改善されたトレース機能は、次のような出力を生成します。

PG14のlibpqによって生成されたログ

1)タイムスタンプが含まれています

2)メッセージの方向のコードはより直感的です:Fはフロントエンドを意味し、Bはバックエンドを意味します

3)プロトコルメッセージの識別子の代わりに公式メッセージ名を出力します

4)意味のあるプロトコルメッセージがXNUMX行で出力されます

ログ検索方法

前と同じように、libpqのPQtrace関数を呼び出してロギングを開始します。 タイムスタンプを出力する必要がない場合は、PQsetTraceFlags関数を使用してタイムスタンプを制御できます。

影響

PQtraceはタイムスタンプを出力します。これは、ユーザーが遅いクエリを識別するのに役立ちます。 アプリケーションの速度が突然低下した場合は、ログのタイムスタンプの違いを確認して、サーバーとクライアントのどちらに時間がかかったかを判断できます。 重要なプロトコルメッセージがXNUMX行で出力されるため、lipqログに慣れていない人でも、サーバーとクライアント間で送信される通信を簡単に理解できます。 PQsetTraceFlags関数を使用してタイムスタンプを出力するかどうかを制御することにより、このログを回帰テストに使用できます。 タイムスタンプを出力しないことにより、予想されるテスト実行の結果をログに入力し、テスト実行中に取得されたログと簡単に比較できます。

未来

PG14のlibpqログには、タイムスタンプとより読みやすいテキストが含まれます。 以降のバージョンでは、次の点で使いやすさがさらに向上します。

1)現在の関数は、PQtrace関数に割り当てられたファイルにログを書き込みます。 場合によっては、ログファイルが非常に大きく拡張され、ファイルの操作に影響を及ぼします。 この問題を解決するために、ファイルの最大サイズを指定する関数を提供したいと考えています。

2)環境変数と接続パラメータを追加して、ログ出力のディレクトリの場所とログファイル名を設定し、アプリケーションを変更せずに環境に適応させたいと考えています。

  リンク:

lq9p16e

nl8060bc3117e