会社
基本的に、これらは pg_stat_activity からの単純な XNUMX 秒ごとのスナップショットですが、重要な点があります。
- 蓄積された情報はすべて RAM にのみ保存され、メモリの消費量は最後に保存されたレコードの数によって制限されます。
- queryid フィールドが追加されます。これは、pg_stat_statements 拡張機能からの同じ queryid です (事前インストールが必要です)。
- top_level_query フィールドが追加されます - 現在のクエリの呼び出し元のクエリのテキスト (pl/pgsql を使用している場合)
pg_active_session_history フィールドの完全なリスト:
コラム | タイプ ----+------------------------ ash_time | タイムゾーン付きのタイムスタンプoid 日付名 | テキストpid | 整数の usesysid | oid 使用名 | テキスト アプリケーション名 | テキスト client_addr | テキスト クライアントのホスト名 | テキストクライアントポート | 整数バックエンドスタート | タイムゾーンを含むタイムスタンプ xact_start | タイムゾーンを含むタイムスタンプ query_start | タイムゾーン付きのタイムスタンプ state_change | タイムゾーンとタイムスタンプ wait_event_type | テキスト待機イベント | テキストの状態 | テキストバックエンド_xid | xid バックエンド_xmin | xid トップレベルクエリ | テキストクエリ | テキストクエリID | bigint バックエンド タイプ | 文章
インストール用の既製のパッケージはまだありません。 ソースをダウンロードしてライブラリを自分でアセンブルすることをお勧めします。 まずサーバーに「devel」パッケージをインストールし、PATH 変数に pg_config へのパスを設定する必要があります。 私たちは以下を収集します:
cd pgsentinel/src
make
make installを
postgres.conf にパラメータを追加します。
shared_preload_libraries = 'pg_stat_statements,pgsentinel'
track_activity_query_size = 2048
pg_stat_statements.track = すべて# メモリに保持されている最近のレコードの数
pgsentinel_ash.max_entries = 10000
PostgreSQL を再起動し、拡張機能を作成します。
拡張子 pgsentinel を作成します。
蓄積された情報により、次のような質問に答えることができます。
- どの待機セッションに最も時間を費やしましたか?
- どのセッションが最も活発でしたか?
- どのようなリクエストが最も活発でしたか?
もちろん、SQL クエリを使用してこれらの質問に対する答えを得ることができますが、マウスで関心のある時間間隔を強調表示して、グラフ上で視覚的に確認する方が便利です。 無料のプログラムでこれを行うことができます
起動時に、PASH-Viewer (バージョン 0.4.0 以降) は pg_active_session_history ビューの存在を確認し、存在する場合はそこから蓄積された履歴全体をロードし、新しい受信データを読み取り続け、15 秒ごとにグラフを更新します。
出所: habr.com