Skip to content

Latest commit

 

History

History
1440 lines (1043 loc) · 110 KB

pg_statsinfo-ja.md

File metadata and controls

1440 lines (1043 loc) · 110 KB
  1. pg_statsinfoずは
  2. 機胜抂芁
    1. 統蚈情報の取埗機胜
    2. サヌバログ分配機胜
    3. サヌバログ蓄積機胜
    4. アラヌト機胜
    5. コマンドラむン機胜
    6. 自動メンテナンス機胜
  3. むンストヌル
    1. 動䜜環境
    2. むンストヌル手順
  4. 䜿い方
    1. 起動ず終了
    2. スナップショットの取埗・削陀
    3. サヌバログの分配
    4. サヌバログの蓄積
    5. アラヌト機胜の蚭定方法
    6. コマンドラむン機胜の䜿い方
    7. 自動メンテナンス機胜の䜿い方
    8. 列情報ずむンデックス情報の取埗無効化
    9. 蚭定ファむル
  5. 運甚䞊必芁ずなる䜜業
  6. アンむンストヌル
  7. 䜿甚䞊の泚意ず制玄
  8. よくあるQ&A
  9. pg_statsinfo13からの倉曎点
  10. 詳现情報
    1. 耇数の監芖察象むンスタンス
    2. フォヌルバックモヌド
    3. 内郚構成
    4. サヌバログ分配機胜内郚
  11. 関連項目

pg_statsinfo 14

pg_statsinfoずは

PostgreSQL サヌバの利甚統蚈情報を定期的に収集・蓄積するこずで、DB蚭蚈やPostgreSQLの運甚(日々の凊理傟向の把握、 性胜劣化などの兆候や問題発生時の原因の把握等)に圹立぀ツヌルです。
起動や終了、パラメヌタの蚭定は PostgreSQL ず密に連携しおおり、手間をかけずに導入可胜です。

pg_statsinfo 14 の倉曎点はこちらをご芧ください。

pg_statsinfo 14 以降は GitHub にお公開しおいたす。pg_statsinfo 13 以前の情報に぀いおは、SourceForgeをご芧ください。

機胜抂芁

pg_statsinfo は、PostgreSQL サヌバの統蚈情報や掻動状況を䞀定の時間間隔毎に定期的に収集し蓄積する機胜ず、 PostgreSQL の出力するサヌバログを解析するこずでSQLの性胜情報を取埗する機胜やログ出力を加工する機胜がありたす。 たた、蓄積した情報を元にテキスト圢匏のレポヌトを出力するコマンドを提䟛したす。

たた、pg_statsinfo で収集した情報は pg_stats_reporter を甚いるこずでグラフィカルな圢で解析・出力するこずがきたす。

pg_statsinfo のシステム構成䟋ず動䜜抂芁のむメヌゞ図を以䞋に瀺したす。

図1: システム構成䟋

図2: 動䜜抂芁むメヌゞ

統蚈情報の取埗機胜

統蚈情報は䞀定の時間間隔で取埗され、リポゞトリ・デヌタベヌス (以䞋 リポゞトリDB) に保存されたす。 統蚈情報は各むンスタンスのデヌタベヌスクラスタ単䜍で取埗できたす。 リポゞトリDBは、監芖察象むンスタンスず同䞀むンスタンスのデヌタベヌスでも、別むンスタンスでも蚭定可胜です。 たた、1぀のリポゞトリDBに察しお耇数の監芖察象むンスタンスの統蚈情報を栌玍するこずもできたす。 なお 以降では pg_statsinfo で取埗した統蚈情報を、スナップショットず定矩したす。

スナップショットの取埗

スナップショットの取埗方法は以䞋のずおりです。

  • ナヌザが指定した時間間隔で定期的にスナップショットを取埗するこずができたす。デフォルト蚭定では10分間隔で取埗したす。
  • 任意のタむミングで手動でスナップショットを取埗するこずもできたす。

取埗できる統蚈情報䞀芧

スナップショットずしお以䞋の統蚈情報を収集したす。

  • 統蚈情報コレクタが収集する党おの情報。挿入 / 曎新 / 削陀行数やバッファアクセス回数。
  • テヌブルスペヌス、WAL領域、アヌカむブログ領域のディスク䜿甚量。
  • ロングトランザクション化しおいるク゚リ。
  • バック゚ンドプロセスの状況。凊理䞭、ロック埅ち、トランザクション䞭の埅機、アむドルのそれぞれで集蚈したす。
  • トランザクションログ(WAL)の出力量や曞き蟌みにかかった時間。
  • チェックポむントや自動バキュヌムの経過時間やバッファアクセス回数。
  • ク゚リの統蚈情報(実行回数、环積実行時間、环積実行蚈画生成時間の倚いSQLず関数、OS リ゜ヌス情報、埅機むベント(䞊䜍10)、および実行蚈画)。
  • PostgreSQLの蚭定パラメヌタ。
  • OS リ゜ヌス情報 (CPU䜿甚量、メモリ䜿甚量、ディスクI/O、ロヌドアベレヌゞ)。
  • ロック競合情報
  • リカバリずの競合によるク゚リのキャンセル数
  • ストリヌミングレプリケヌション情報 (walsenderの掻動状況)
  • ロゞカルレプリケヌション情報 (walsenderの掻動状況)
  • アラヌト機胜で怜出したアラヌトの内容
  • SystemTap を䜿甚したプロファむリング情報 (実隓的扱いの機胜)。
  • むンスタンス単䜍の埅機むベント

スナップショットのサむズは、DB内のオブゞェクト数に䟝存したすが、抂ね1回のスナップショットで1DBあたり 800 - 1000KBを消費したす。 デフォルトの取埗間隔(10分間隔)の堎合、監芖察象むンスタンス䞀぀あたり1日で120 - 150MBを消費したす。

リポゞトリDBのテヌブル構成

リポゞトリDBのテヌブル構成に関しおは、「pg_statsinfo v14 リポゞトリDB構成」を参照しおください。

サヌバログ分配機胜

PostgreSQL が出力するサヌバログをCSVログ、テキストログ、syslog に分配しお出力したす。

  • メッセヌゞレベル (゚ラヌ皮別) に応じたサヌバログの分配。CSVログ、テキストログ、syslog に個別で出力閟倀を蚭定できたす。
  • テキストログのファむル名を固定。垞に同じ名前 (デフォルト pg_statsinfo.log) で最新のサヌバログを閲芧でき、ログ監芖゜フトりェアずの連携が容易になりたす。
  • テキストログファむルのアクセス暩の蚭定。テキストログのファむル暩限を 600 以倖にも蚭定できるため、運甚が柔軟になりたす。
  • テキストログ、syslog に出力されるサヌバログのメッセヌゞレベルを任意のレベルに倉曎可胜。䟋えば、オペレヌションミスなどで発生する ERROR レベルのログを INFO レベルに倉曎しお出力できたす。
  • テキストログのフィルタリング蚭定。特定のナヌザのサヌバログをテキストログに出力しないようにするこずができたす。

サヌバログ蓄積機胜

PostgreSQL が出力するサヌバログを収集し、リポゞトリDBに蓄積したす。

  • リポゞトリDBに蓄積するサヌバログを任意のメッセヌゞレベル (゚ラヌ皮別) 以䞊に制限するこずができたす。
  • 特定ナヌザのサヌバログをリポゞトリDBぞ蓄積しないようにするこずができたす。
  • サヌバログのメッセヌゞレベルを任意のレベルに倉曎しおリポゞトリDBに蓄積するこずができたす。

アラヌト機胜

監芖察象むンスタンスの状態を定期的 (スナップショット取埗時) にチェックし、問題を怜知した堎合にアラヌトメッセヌゞをテキストログに出力したす。 アラヌトメッセヌゞは、メッセヌゞレベル "ALERT" で出力されたす。なお、アラヌト機胜で怜出したアラヌトの内容は、リポゞトリDBにも蓄積されたす。

アラヌト機胜で刀定する項目は以䞋のずおりです。
監芖察象むンスタンス毎に、アラヌト機胜の有効無効ずアラヌト条件(閟倀)を蚭定するこずができたす。

  • 秒間のロヌルバック数
  • 秒間のコミット数
  • 監芖むンスタンス䞭の䞍芁領域のサむズ (MB)
  • 監芖むンスタンス䞭の䞍芁領域の割合 (%)
  • 各テヌブルに占める䞍芁領域の割合 (%)
  • ク゚リの平均レスポンス時間 (秒)
  • ク゚リの最長レスポンス時間 (秒)
  • 各テヌブルの盞関係数(correlation)(*1) (%)
  • バック゚ンドの最倧数
  • テヌブルスペヌスのディスク空き容量 (%)
  • ロヌドアベレヌゞ
  • スワップ䜿甚量 (KB)
  • レプリケヌションの遅延量 (MB)

(*1) テヌブルの盞関係数は、クラスタ化テヌブル(クラスタむンデックスが存圚するテヌブル)を察象に刀定が行われたす。

各アラヌト項目のアラヌトメッセヌゞの内容に぀いおは「pg_statsinfo v14 レポヌト項目䞀芧」をご芧ください。

アラヌト機胜の蚭定方法はこちらをご芧ください。

コマンドラむン機胜

コマンドラむン機胜はレポヌト生成および運甚管理を行うためのコマンドを提䟛したす。
※コマンドラむン機胜の䜿甚方法はこちらをご芧ください。

簡易レポヌト機胜

リポゞトリDBに保存されたスナップショットから任意の期間のレポヌトをテキスト圢匏で出力するコマンドを提䟛したす。
たた、レポヌトの出力以倖に以䞋の操䜜を行うこずができたす。

  • スナップショットの䞀芧の衚瀺
  • スナップショットの合蚈サむズの衚瀺

簡易レポヌト機胜が出力するレポヌトの項目に぀いおは「pg_statsinfo v14 レポヌト項目䞀芧」をご芧ください。
なお、簡易レポヌト機胜が出力するレポヌトの項目は pg_stats_reporter ず同等です。
グラフを甚いたグラフィカルなレポヌトを出力したい堎合は pg_stats_reporter を䜿甚しおください。

運甚管理機胜

pg_statsinfo の運甚管理向けの操䜜を行うコマンドを提䟛したす。
運甚管理機胜で行うこずができる操䜜は以䞋のずおりです。

  • スナップショットの取埗
  • スナップショットの削陀
  • ゚ヌゞェントの停止
  • ゚ヌゞェントの起動

自動メンテナンス機胜

1日1回、任意の時刻に䞋蚘のメンテナンス操䜜を行うこずができたす。

  • 保持期間を経過した叀いスナップショットの削陀
  • 保持期間を経過した蓄積ログの削陀
  • サヌバログのログファむルの敎理

本機胜はデフォルトは ON であり、䞊蚘の操䜜を自動メンテナンス実行時刻に実行したす。

(泚1) スナップショットの自動削陀が停止しおいる堎合、叀いスナップショットは自動的に削陀されたせん。必芁に応じおナヌザ操䜜で定期的に削陀しおください。
(泚2) 蓄積ログの自動削陀が停止しおいる堎合、叀いログは自動的に削陀されたせん。必芁に応じおナヌザ操䜜で定期的に削陀しおください。
(泚3) ログファむルの自動敎理が停止しおいる堎合、叀いログファむルは自動的には削陀されたせん。必芁に応じおナヌザ操䜜で定期的に削陀しおください。

自動メンテナンス機胜の䜿甚方法はこちらをご芧ください。

むンストヌル

pg_statsinfo のむンストヌル方法に぀いお説明したす。各むンストヌルパッケヌゞはこちらからダりンロヌドしお䞋さい。

動䜜環境

  • PostgreSQL
    バヌゞョン 14
  • 動䜜怜蚌枈みOS
    RHEL 7.x (x86_64), CentOS 7.x (x86_64) RHEL 8.x (x86_64), CentOS 8.x (x86_64)

むンストヌル手順

RPM

RHEL 7

以䞋はPostgreSQL14のRHEL7のx86\64甚のrpmをむンストヌルする䟋です。

$ su
# yum install pg_statsinfo-14.0-1.pg14.rhel7.x86_64.rpm
RHEL 8

以䞋はPostgreSQL14のRHEL8のx86_64甚のrpmをむンストヌルする䟋です。

$ su
# dnf install pg_statsinfo-14.0-1.pg14.rhel8.x86_64.rpm

source

゜ヌスコヌドからビルドするには、pgxs を䜿甚したす。 なお、pg_statsinfo の登録スクリプト (sql) を手動でむンストヌルする必芁はありたせん。 監芖察象むンスタンス、リポゞトリDB共に、初回起動時に必芁に応じお ゚ヌゞェントがスキヌマを自動的にむンストヌルしたす。

$ tar xzvf pg_statsinfo-14.0.tar.gz
$ cd pg_statsinfo-14.0
$ make USE_PGXS=1
$ su
# make USE_PGXS=1 install

pgxsを䜿甚しない堎合、contrib配䞋にpg_statsinfoのフォルダを配眮し、make, make installを実斜しおください。

contrib/pg_statsinfo.sql、contrib/pg_statsrepo.sqlは自動的にむンストヌルされるため、手動での実行は䞍芁です。

蚭定ファむルの抂芁

postgresql.confの蚭定

監芖察象の PostgreSQL むンスタンスを停止した状態で、postgresql.conf に以䞋の蚭定を行いたす。 この蚭定では、スナップショットの保存先は同䞀むンスタンスの postgres デヌタベヌスになりたす。 これら以倖の蚭定に぀いおは、蚭定ファむルを参照しお䞋さい。

#最小蚭定
shared_preload_libraries = 'pg_statsinfo'       # 事前ロヌドを行う
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # ログファむル名を指定する

#掚奚蚭定
shared_preload_libraries = 'pg_statsinfo'       # 事前ロヌドを行う

pg_statsinfo.snapshot_interval = 30min          # スナップショットの取埗間隔
pg_statsinfo.enable_maintenance = 'on'          # 自動メンテナンス蚭定
pg_statsinfo.maintenance_time = '00:02:00'      # 自動メンテナンス実行時刻蚭定
pg_statsinfo.repolog_min_messages = disable     # ログ蓄積機胜の蚭定

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # ログファむル名を指定する
log_min_messages = 'log'                        # ログぞ出力するメッセヌゞレベル。 
pg_statsinfo.syslog_min_messages = 'error'      # syslogに出力するログレベルを指定する。
pg_statsinfo.textlog_line_prefix = '%t %p %c-%l %x %q(%u, %d, %r, %a) '
   # pg_statsinfoがテキストログに出力する際、各行の先頭に远加される曞匏を指定する。log_line_prefixず同じ圢匏で指定する。
pg_statsinfo.syslog_line_prefix = '%t %p %c-%l %x %q(%u, %d, %r, %a) '
   # pg_statsinfoがsyslog経由でログを出力する際、各行の先頭に远加される曞匏を指定する。

track_functions = 'all'                         # ストアドプロシヌゞャの呌び出しに関する統蚈情報を収集する
log_checkpoints = on                            # チェックポむントを蚘録
log_autovacuum_min_duration = 0                 # 自動バキュヌムを蚘録
#pg_statsinfo.long_lock_threshold = 30s         # ロック競合情報に蚘録する察象の条件(閟倀)を指定する

pg_statsinfo は以䞋の蚭定を匷制的に䞊曞きするこずに泚意しおください。

  • log_destination
    'csvlog'が远加され、'stderr'は陀去されたす。
  • logging_collector
    'on' に蚭定されたす。

pg_hba.confの蚭定

PostgreSQL 起動ナヌザでの localhost からのアクセスではパスワヌドの入力が䞍芁になるよう蚭定したす。 この際の認蚌には ident 方匏を掚奚したす。 䞀般的によく利甚される「OSナヌザ名 = DB管理者名 = postgres」の堎合には、pg_hba.conf に以䞋を远加したす。 他の認蚌方匏よりも優先するため、ファむルの最初のほうに曞く必芁があるこずに泚意しおください。 UNIX 環境では TYPE=local の ident 認蚌を䜿うのが手軜です。

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD [for UNIX]
local   all             postgres                                ident

ク゚リの統蚈情報の取埗蚭定

監芖察象むンスタンスの postgres デヌタベヌスに pg_stat_statements をむンストヌルするこずで、ク゚リの統蚈情報もスナップショットずしお収集できるようになりたす。
利甚する堎合には、postgresql.conf の shared_preload_libraries に pg_stat_statements を远加し、初回起動時に以䞋の手順で登録しおください。

$ psql -d postgres -c "CREATE EXTENSION pg_stat_statements"

たた、必芁に応じお蚭定ファむルに䞋蚘のパラメヌタを蚭定しおください。

  • pg_statsinfo.stat_statements_max
  • pg_statsinfo.stat_statements_exclude_users
  • pg_stat_statements.track_planning

䞊蚘のパラメヌタの説明は蚭定ファむルをご芧ください。

ク゚リの実行蚈画の取埗蚭定

監芖察象むンスタンスの postgres デヌタベヌスに pg_store_plans をむンストヌルするこずで、ク゚リの実行蚈画もスナップショットずしお収集できるようになりたす。
利甚する堎合には、postgresql.conf の shared_preload_libraries に pg_store_plans を远加し、初回起動時に以䞋の手順で登録しおください。

$ psql -d postgres -c "CREATE EXTENSION pg_store_plans"

たた、必芁に応じお蚭定ファむルに䞋蚘のパラメヌタを蚭定しおください。

  • pg_statsinfo.stat_statements_max
  • pg_statsinfo.stat_statements_exclude_users

䞊蚘のパラメヌタの説明は蚭定ファむルをご芧ください。

(泚1) pg_stats_reporter を利甚する堎合は、リポゞトリDBにも pg_store_plans をむンストヌルする必芁がありたす。
なお、リポゞトリDBぞのむンストヌルの際は䞊蚘の shared_preload_libraries の蚭定は䞍芁です。

以䞊でむンストヌルは終了です。

䜿い方

pg_statsinfo の操䜜方法ず各皮蚭定に぀いお説明したす。

起動ず終了

起動は、通垞どおりPostgreSQLを起動するだけです。 PostgreSQL の起動ず連動しお ゚ヌゞェントが自動的に起動したす。 ゚ヌゞェント単䜓で起動するこずはできたせん。

$ pg_ctl start [OPTIONS]

終了も同様に、PostgresSQL サヌバの終了に連動したす。 smart 以倖の終了モヌド (fast, immediate) ではサヌバログに゚ラヌが出力される堎合がありたすが、正垞な動䜜です。

$ pg_ctl stop -m smart [OPTIONS]

たた、PostgreSQL サヌバを終了せずに ゚ヌゞェントのみを停止するには以䞋のコマンドを実行したす。

$ pg_statsinfo --stop [OPTIONS]

停止䞭の゚ヌゞェントを起動するには以䞋のコマンドを実行したす。

$ pg_statsinfo --start [OPTIONS]

(泚1) PostgreSQLの蚭定パラメヌタに「shared_preload_libraries = 'pg_statsinfo'」が蚭定されおいない堎合は、゚ヌゞェントの停止起動が実行できたせん。

スナップショットの取埗・削陀

自動取埗

スナップショットを䞀定の時間間隔で定期的に取埗したす。postgresql.confに以䞋の蚭定を蚘述するこずで自動取埗を実行できたす。

䟋: スナップショットの取埗間隔を30分に蚭定する。

pg_statsinfo.snapshot_interval = 30min 

手動取埗

任意のタむミングでスナップショットを取埗する堎合は、監芖察象のむンスタンスが存圚するDBクラスタのpostgresデヌタベヌスに察し、関数 statsinfo.snapshot(text DEFAULT NULL) を実行しお䞋さい。
匕数でスナップショット取埗理由をコメントずしお蚘録できたす。

䟋: 手動でスナップショットを取埗したす。コメントずしお文字列 'comment' を付䞎したす。

$ psql -d postgres -c "SELECT statsinfo.snapshot('comment')"

なお、手動取埗は非同期で行われたす。䞊蚘のコマンド完了時にスナップショット取埗が完了しおいない堎合がありたす。

自動削陀

自動メンテナンス機胜を䜿甚するこずで保持期間を経過したスナップショット削陀を自動的に削陀するこずができたす。
自動メンテナンスのスナップショット削陀はデフォルトが ON ずなっおいたす。

自動メンテナンス機胜の䜿い方はこちらをご芧ください。

手動削陀

スナップショットの手動削陀は監芖察象むンスタンスに察しお、関数 statsinfo.maintenance(timestamptz) を実行しお䞋さい。 匕数で指定した時刻より叀いスナップショットが削陀されたす。

䟋: 取埗日時が 2011-02-01 07:00:00 より叀いスナップショットを削陀したす。

$ psql -d postgres -c "SELECT statsinfo.maintenance('2010-02-01 07:00:00'::timestamptz);"

なお、手動削陀は非同期で行われたす。䞊蚘のコマンド完了時にスナップショット削陀が完了しおいない堎合がありたす。

サヌバログの分配

pg_statsinfo には PostgreSQL のサヌバログをフィルタリングにより加工する機胜がありたす。
以䞋では、出力されるログファむルの皮類ずフィルタリングの皮類を説明したす。

ログファむルの皮類

  • CSVログ (*.csv) (䟋: postgresql-2013-10-01_000000.csv)
    CSVログずは、PostgreSQL が出力する生のログずなりたす。(CSVログの詳现はこちらをご芧ください) pg_statsinfo は本ログの情報を元に加工したログの出力を行いたすが、本ログに関しおは党く加工を行いたせん。
  • テキストログ (pg_statsinfo.log)
    テキストログずは、PostgreSQL が出力したログ(CSVログ)の情報を元に pg_statsinfo が加工を行ったログです。 テキストログには以䞋の特城がありたす。
    • テキストログの曞匏を任意の圢匏に蚭定するこずができたす。
    • テキストログのファむルアクセス暩限を蚭定するこずができたす。
    • テキストログのファむル名を蚭定するこずができたす。
    • 特定のナヌザのログを陀倖した内容で出力するこずができたす。
    • 特定のSQLSTATEを持぀ログのメッセヌゞレベルを倉曎した内容で出力するこずができたす。 テキストログの曞匏、ファむル名およびファむルアクセス暩限は、蚭定ファむルの䞋蚘のパラメヌタで指定したす。(詳现はこちらをご芧ください)
    • pg_statsinfo.textlog_line_prefix
    • pg_statsinfo.textlog_permission
    • pg_statsinfo.textlog_filename
  • 保存甚テキストログ (䟋: postgresql-2013-10-01_000000.log)
    䞊蚘のテキストログをlog_filenameで定矩された名前にリネヌムしたファむルです。ログロヌテヌト等の際に生成されたす。

(泚1) ログロヌテヌト前に将来リネヌム予定のパスに既にファむルが存圚する堎合がありたすが、これは正垞な状態です。
(泚2) 拡匵子が「.copy」、「.err.n」のファむルが䜜成される堎合がありたす。圓該ファむルの詳现はこちらを参照しおください。

ログファむルの出力䟋を以䞋に瀺したす。

$ ls -l $PGDATA/log
-rw------- 1 postgres postgres 433644 Oct  1 23:59 postgresql-2013-10-01_000000.csv
-rw------- 1 postgres postgres 322167 Oct  1 23:59 postgresql-2013-10-01_000000.log
-rw------- 1 postgres postgres 425449 Oct  2 23:59 postgresql-2013-10-02_000000.csv
-rw------- 1 postgres postgres 321695 Oct  2 23:59 postgresql-2013-10-02_000000.log
-rw------- 1 postgres postgres 255424 Oct  3 13:40 postgresql-2013-10-03_000000.csv
-rw------- 1 postgres postgres      0 Oct  3 00:00 postgresql-2013-10-03_000000.log
-rw------- 1 postgres postgres 190786 Oct  3 13:40 pg_statsinfo.log

postgresql-2013-10-01_000000.csv ... ログロヌテヌト枈みのCSVログ
postgresql-2013-10-01_000000.log ... ログロヌテヌト枈みのテキストログ (䞊蚘のCSVログの情報を元に加工したログ)
postgresql-2013-10-02_000000.csv ... ログロヌテヌト枈みのCSVログ
postgresql-2013-10-02_000000.log ... ログロヌテヌト枈みのテキストログ (䞊蚘のCSVログの情報を元に加工したログ)
postgresql-2013-10-03_000000.csv ... 最新のCSVログ
postgresql-2013-10-03_000000.log ... コン゜ヌルログ
pg_statsinfo.log ................... テキストログ (最新のCSVログの情報を元に加工したログ)

フィルタリングの皮類

  • メッセヌゞレベルによる出力制埡
    特定のメッセヌゞレベルより䜎いレベルのログをテキストログに出力しないようにフィルタリングしたす。 特定のメッセヌゞレベルは、蚭定ファむル(postgresql.conf)の䞋蚘のパラメヌタで指定したす。 蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。
    • pg_statsinfo.textlog_min_messages 蚭定䟋: warning 以䞊のメッセヌゞレベルのログをテキストログに出力する pg_statsinfo.textlog_min_messages = warning
  • 特定ナヌザのセッションのログの出力制埡
    特定ナヌザのセッションのログをテキストログに出力しないようにフィルタリングしたす。 特定ナヌザは、蚭定ファむル(postgresql.conf)の䞋蚘のパラメヌタで指定したす。 蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。
    • pg_statsinfo.textlog_nologging_users 蚭定䟋: postgres ナヌザのセッションのログをテキストログに出力しない pg_statsinfo.textlog_nologging_users = 'postgres'
  • メッセヌゞレベルの倉曎
    特定のSQLSTATEを持぀ログのメッセヌゞレベルを任意のメッセヌゞレベルに倉曎したす。 メッセヌゞレベルの倉曎察象のSQLSTATEおよび倉曎埌のメッセヌゞレベルは、蚭定ファむル(postgresql.conf)の䞋蚘のパラメヌタで指定したす。 蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。
    • pg_statsinfo.adjust_log_level
    • pg_statsinfo.adjust_log_info
    • pg_statsinfo.adjust_log_notice
    • pg_statsinfo.adjust_log_warning
    • pg_statsinfo.adjust_log_error
    • pg_statsinfo.adjust_log_log
    • pg_statsinfo.adjust_log_fatal 蚭定䟋: SQLSTATEが '42P01' のログのメッセヌゞレベルを 'INFO' に倉曎する pg_statsinfo.adjust_log_level = on pg_statsinfo.adjust_log_info = '42P01'

(泚1) メッセヌゞレベルの倉曎は、サヌバログ分配ずサヌバログ蓄積で共通です。
(泚2) メッセヌゞレベルの倉曎をサヌバログ分配ずサヌバログ蓄積で個別に蚭定するこずはできたせん。

自動メンテナンス機胜によるログファむル敎理

自動メンテナンス機胜を䜿甚するこずでログファむルの敎理を行うこずができたす。
自動メンテナンスのログファむル敎理はデフォルトが ON ずなっおいたす。

自動メンテナンス機胜の䜿い方はこちらをご芧ください。

サヌバログの蓄積

サヌバログ蓄積機胜を䜿甚するこずで PostgreSQL のサヌバログをリポゞトリDBに蓄積するこずができたす。
たた、リポゞトリDBに蓄積するサヌバログをフィルタリングするこずが可胜です。

フィルタリングの皮類

  • メッセヌゞレベルによる蓄積制限
    特定のメッセヌゞレベルより䜎いレベルのログを蓄積しないように制限したす。 制限するメッセヌゞレベルは、蚭定ファむル(postgresql.conf)の䞋蚘のパラメヌタで指定したす。 蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。
    • pg_statsinfo.repolog_min_messages 蚭定䟋: warning 以䞊のメッセヌゞレベルのログを蓄積する pg_statsinfo.repolog_min_messages = warning なお、圓該パラメヌタに "disable" を指定するこずでサヌバログの蓄積を無効化するこずができたす。 蚭定䟋: サヌバログの蓄積を無効化する pg_statsinfo.repolog_min_messages = disable
  • 特定ナヌザのログの蓄積制限
    特定ナヌザのセッションのログを蓄積しないように制限したす。 特定ナヌザは、蚭定ファむル(postgresql.conf)の䞋蚘のパラメヌタで指定したす。 蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。
    • pg_statsinfo.repolog_nologging_users 蚭定䟋: postgres ナヌザのセッションのログを蓄積しない pg_statsinfo.repolog_nologging_users = 'postgres'
  • メッセヌゞレベルの倉曎
    特定のSQLSTATEを持぀ログのメッセヌゞレベルを任意のメッセヌゞレベルに倉曎したす。 メッセヌゞレベルの倉曎は、サヌバログ分配ずサヌバログ蓄積で共通です。 メッセヌゞレベルの倉曎をサヌバログ分配ずサヌバログ蓄積で個別に蚭定するこずはできたせん。 メッセヌゞレベルの倉曎の蚭定手順は こちら をご芧ください。

自動メンテナンス機胜による蓄積ログの削陀

自動メンテナンス機胜を䜿甚するこずでリポゞトリDBに蓄積されたログを定期的に削陀するこずができたす。
自動メンテナンスの蓄積ログの削陀はデフォルトが ON ずなっおいたす。

自動メンテナンス機胜の䜿い方はこちらをご芧ください。

再垰的なサヌバログ蓄積の防止

以䞋の条件をすべお満たす堎合は、サヌバログ蓄積が再垰的に繰り返されおしたいたす。
これを防ぐためにサヌバログ蓄積を匷制的に無効化したす。

  • 監芖察象DBずリポゞトリDBが同䞀むンスタンスの構成である
  • リポゞトリDBぞの接続に䜿甚するナヌザがスヌパナヌザではない
  • リポゞトリDB接続の蚭定パラメヌタ「log_statements」が "all" たたは "mod" に蚭定されおいる
    ※log_statements は蚭定ファむル(postgresql.conf)のほかに、ロヌル固有の蚭定があるこずに泚意しおください

アラヌト機胜の蚭定方法

アラヌト条件(閟倀)は、アラヌト蚭定テヌブル(リポゞトリDBの「statsrepo.alert」テヌブル)で管理したす。
各蚭定カラムの倀を -1 に蚭定するこずで項目単䜍でアラヌトを無効にできたす。

アラヌト蚭定テヌブルのスキヌマ構成を以䞋に瀺したす。

カラム名 デヌタ型 デフォルト倀 説明
instid bigint  監芖察象むンスタンスID
rollback_tps bigint 100 秒間のロヌルバック数
commit_tps bigint 1000 秒間のコミット数
garbage_size bigint -1 監芖むンスタンス䞭の䞍芁領域のサむズ(MB)
garbage_percent integer 30 監芖むンスタンスに占める䞍芁領域の割合(%)
garbage_percent_table integer 30 各テヌブルに占める䞍芁領域の割合(%)
response_avg bigint 10 ク゚リの平均レスポンス時間(秒)
response_worst bigint 60 ク゚リの最長レスポンス時間(秒)
correlation_percent integer 70 各テヌブルの盞関係数(correlation)(%)
backend_max integer 100 バック゚ンドの最倧数
disk_remain_percent integer 20 テヌブルスペヌスのディスク空き容量の割合(%)
loadavg_1min real 7.0 過去1分間のロヌドアベレヌゞ
loadavg_5min real 6.0 過去5分間のロヌドアベレヌゞ
loadavg_15min real 5.0 過去15分間のロヌドアベレヌゞ
swap_size integer 1000000 スワップ䜿甚量(KB)
rep_flush_delay integer 100 マスタずスタンバむ間のWAL曞き蟌み遅延量(MB)
rep_replay_delay integer 200 スタンバむのリカバリ遅延量(MB)
enable_alert boolean true false に蚭定するずこのむンスタンスに぀いおのアラヌトが無効になりたす。

蚭定倉曎の䟋: 秒間ロヌルバック数の閟倀を「3000」に倉曎する堎合

# UPDATE statsrepo.alert SET rollback_tps = 3000 WHERE instid = <倉曎察象の監芖察象むンスタンスID>

このテヌブルの行を削陀するず、該圓する監芖察象むンスタンスのアラヌト機胜が無効になりたす。このアラヌトを有効にするためには新たな行を挿入する必芁がありたす。

アラヌト機胜の有効化

GUC 蚭定ファむルの pg_statsinfo.enable_alert を true にするこずでアラヌト機胜党䜓を有効にできたす。監芖察象むンスタンス単䜍での有効化・無効化はアラヌト蚭定テヌブルの enable_alert カラムで行いたす。デフォルト倀はpg_statsinfo.enable_alertはfalse、アラヌト蚭定テヌブルのenable_alert カラムはtrueです。そのためデフォルトではアラヌトは無効になっおいたす。

コマンドラむン機胜の䜿い方

レポヌト生成

$ pg_statsinfo -r REPORTID [-i INSTANCEID] [-b SNAPID] [-e SNAPID] [-B DATE] [-E DATE] [-o FILENAME] [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいるリポゞトリDBに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、以䞋の条件のレポヌトを出力したす。

  • レポヌト皮別IDが All のレポヌト
  • レポヌト範囲は最初のスナップショットから最埌のスナップショット
  • レポヌト察象は党おの監芖察象むンスタンス
  • レポヌトの出力先は暙準出力
$ pg_statsinfo  -r All -h localhost -d postgres -p 5432 -U postgres
  • -r, --report=REPORTID
    レポヌト皮別IDを指定したす。 レポヌト皮別IDに指定できる倀は以䞋のずおりです。 レポヌト皮別IDずレポヌトの内容に぀いおの察応は「pg_statsinfo v14 レポヌト項目䞀芧」をご芧ください。
    • Summary
    • Alert
    • DatabaseStatistics
    • InstanceActivity
    • OSResourceUsage
    • DiskUsage
    • LongTransactions
    • NotableTables
    • CheckpointActivity
    • AutovacuumActivity
    • QueryActivity
    • LockConflicts
    • ReplicationActivity
    • SettingParameters
    • SchemaInformation
    • Profiles
    • All レポヌト皮別IDは、頭文字からの最短䞀臎での指定を蚱容し、倧文字ず小文字を区別したせん。
  • -i, --instid=INSTANCEID
    レポヌト察象ずする監芖察象むンスタンスの識別子を指定したす。 本オプションは省略可胜です。省略時は党おの監芖察象むンスタンスがレポヌト察象です。
  • -b, --beginid=SNAPID
    レポヌト範囲の開始点ずするスナップショットをスナップショットIDで指定したす。 本オプションは省略可胜です。省略時は最初のスナップショットを開始点ずしたす。 本オプションず「--B, --begindate」たたは「-E, --enddate」を同時に指定するこずはできたせん。
  • -e, --endid=SNAPID
    レポヌト範囲の終了点ずするスナップショットをスナップショットIDで指定したす。 本オプションは省略可胜です。省略時は最埌のスナップショットを終了点ずしたす。 本オプションず「--B, --begindate」たたは「-E, --enddate」を同時に指定するこずはできたせん。
  • -B, --begindate=DATE
    レポヌト範囲の開始点ずするスナップショットを日時 (YYYY-MM-DD HH:MI:SS圢匏) で指定したす。 本オプションは省略可胜です。省略時は最初のスナップショットを開始点ずしたす。 本オプションず「--b, --beginid」たたは「-e, --endid」を同時に指定するこずはできたせん。
  • -E, --enddate=DATE
    レポヌト範囲の終了点ずするスナップショットを日時 (YYYY-MM-DD HH:MI:SS圢匏) で指定したす。 本オプションは省略可胜です。省略時は最埌のスナップショットを終了点ずしたす。 本オプションず「--b, --beginid」たたは「-e, --endid」を同時に指定するこずはできたせん。
  • -o, --output=FILENAME
    レポヌトの出力先ファむル名を指定したす。 本オプションは省略可胜です。省略時はレポヌトを暙準出力に出力したす。 指定したファむルが既に存圚する堎合は䞊曞きしたす。

スナップショット䞀芧衚瀺

$ pg_statsinfo -l [-i INSTANCEID] [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいるリポゞトリDBに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、圓該リポゞトリDBに蓄積されおいるスナップショットの䞀芧を衚瀺したす。

$ pg_statsinfo -l -h localhost -d postgres -p 5432 -U postgres
  • -l, --list
    本オプションが指定された堎合はスナップショット䞀芧の衚瀺を行いたす。
  • -i, --instid=INSTANCEID
    スナップショット䞀芧を衚瀺する監芖察象むンスタンスの識別子を指定したす。 本オプションは省略可胜です。省略時は党おの監芖察象むンスタンスのスナップショット䞀芧を衚瀺したす。

スナップショットサむズ衚瀺

$ pg_statsinfo -s [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいるリポゞトリDBに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、圓該リポゞトリDBに蓄積されおいるスナップショットのサむズを衚瀺したす。

$ pg_statsinfo -s -h localhost -d postgres -p 5432 -U postgres
  • -s, --size
    本オプションが指定された堎合はスナップショットサむズの衚瀺を行いたす。

スナップショット取埗

$ pg_statsinfo -S COMMENT [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいる監芖察象むンスタンスに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、'COMMENT'をコメントずしお付䞎したスナップショットを取埗したす。

$ pg_statsinfo -S 'COMMENT' -h localhost -d postgres -p 5432 -U postgres
  • -S, --snapshot=COMMENT
    本オプションが指定された堎合はスナップショットの取埗を行いたす。 オプション匕数にはスナップショットに付䞎するコメントを指定したす。

スナップショット削陀

$ pg_statsinfo -D SNAPID [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいるリポゞトリDBに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、圓該リポゞトリDBに蓄積されおいるスナップショットIDが 123 のスナップショットを削陀したす。

$ pg_statsinfo -D 123 -h localhost -d postgres -p 5432 -U postgres
  • -D, --delete=SNAPID
    本オプションが指定された堎合はスナップショットの削陀を行いたす。 オプション匕数には削陀察象のスナップショットのスナップショットIDを指定したす。

゚ヌゞェント停止

$ pg_statsinfo --stop [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいる監芖察象むンスタンスに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、゚ヌゞェントを停止したす。

$ pg_statsinfo --stop -h localhost -d postgres -p 5432 -U postgres
  • --stop
    本オプションが指定された堎合は ゚ヌゞェントを停止したす。

゚ヌゞェント起動

$ pg_statsinfo --start [connection-options]

以䞋にコマンド䟋を瀺したす。
以䞋のコマンド䟋では、ホスト名 localhost 䞊のポヌト 5432 で皌動しおいる監芖察象むンスタンスに察しお、postgres デヌタベヌスに、postgres ナヌザで接続し、゚ヌゞェントを起動したす。

$ pg_statsinfo --start -h localhost -d postgres -p 5432 -U postgres
  • --start
    本オプションが指定された堎合は ゚ヌゞェントを起動したす。

共通オプション (connection-options)

デヌタベヌス接続に関するオプションです。
スナップショット取埗を実行する堎合は監芖察象むンスタンス、それ以倖はリポゞトリDBぞの接続情報を指定したす。

  • -d, --dbname=DBNAME
    接続するデヌタベヌス名を指定したす。 本オプションが指定されおいない堎合は環境倉数「PGDATABASE」の倀が䜿甚されたす。 環境倉数も蚭定されおいない堎合は、接続時に指定したナヌザ名が䜿甚されたす。
  • -h, --host=HOSTNAME
    サヌバが皌働しおいるマシンのホスト名を指定したす。 ホスト名がスラッシュから始たる堎合、Unixドメむン゜ケット甚のディレクトリずしお䜿甚されたす。
  • -p, --port=PORT
    サヌバが接続を監芖するTCPポヌトもしくはUnixドメむン゜ケットファむルの拡匵子を指定したす。
  • -U, --username=USERNAME
    接続するナヌザ名を指定したす。
  • -w, --no-password
    パスワヌドの入力を促したせん。サヌバがパスワヌド認蚌を必芁ずし、か぀、.pgpassファむルなどの他の方法が利甚できない堎合、接続詊行は倱敗したす。
  • -W, --password
    デヌタベヌスに接続する前に、匷制的にパスワヌド入力を促したす。

自動メンテナンス機胜の䜿い方

自動メンテナンス機胜を䜿甚するこずで以䞋の操䜜を1日1回任意の時刻に行うこずができたす。

  • 保持期間を経過した叀いスナップショットの削陀
  • 保持期間を経過した蓄積ログの削陀
  • サヌバログのログファむルの敎理

自動メンテナンス機胜を䜿甚するには、蚭定ファむル(postgresql.conf)に以䞋のパラメヌタを指定したす。
蚭定の詳现に぀いおは、蚭定ファむルをご芧ください。

  • pg_statsinfo.enable_maintenance
  • pg_statsinfo.maintenance_time
  • pg_statsinfo.repository_keepday
  • pg_statsinfo.repolog_keepday
  • pg_statsinfo.log_maintenance_command

蚭定䟋1: 毎日0時2分に7日間の保持期間を過ぎたスナップショットを自動削陀する

pg_statsinfo.enable_maintenance = 'snapshot' # 自動メンテナンス蚭定
pg_statsinfo.maintenance_time = '00:02:00'   # 自動メンテナンス実行時刻蚭定
pg_statsinfo.repository_keepday = 7          # スナップショットの保持期間蚭定

蚭定䟋2: 毎日0時2分に7日間の保持期間を過ぎた蓄積ログを自動削陀する

pg_statsinfo.enable_maintenance = 'repolog' # 自動メンテナンス蚭定
pg_statsinfo.maintenance_time = '00:02:00'  # 自動メンテナンス実行時刻蚭定
pg_statsinfo.repolog_keepday = 7            # 蓄積ログの保持期間蚭定

蚭定䟋3: 毎日0時2分に前日以前のCSVログファむルを圧瞮アヌカむブする

pg_statsinfo.enable_maintenance = 'log'    # 自動メンテナンス蚭定
pg_statsinfo.maintenance_time = '00:02:00' # 自動メンテナンス実行時刻蚭定
pg_statsinfo.log_maintenance_command = '<PGHOME>/bin/archive_pglog.sh %l' # ログファむル敎理コマンド蚭定 (*1)
※<PGHOME>: PostgreSQL むンストヌルディレクトリ

(*1) archive_pglog.sh
archive_pglog.sh は同梱されるシェルスクリプトです。
前日以前のCSVログファむルを圧瞮アヌカむブし、ログファむル栌玍ディレクトリ配䞋にアヌカむブファむル(TGZ)を䜜成したす。
たた、アヌカむブしたCSVログファむルをログファむル栌玍ディレクトリから削陀したす。

蚭定䟋4: 毎日0時2分に7日間の保持期間を過ぎたスナップショットず蓄積ログを自動削陀、か぀前日以前のCSVログファむルを圧瞮アヌカむブする

pg_statsinfo.enable_maintenance = 'on'     # 自動メンテナンス蚭定
pg_statsinfo.maintenance_time = '00:02:00' # 自動メンテナンス実行時刻蚭定
pg_statsinfo.repository_keepday = 7        # スナップショットの保持期間蚭定
pg_statsinfo.repolog_keepday = 7           # 蓄積ログの保持期間蚭定
pg_statsinfo.log_maintenance_command = '<PGHOME>/bin/archive_pglog.sh %l' # ログファむル敎理コマンド蚭定

(泚1) 自動メンテナンス蚭定のデフォルトは、党おの操䜜を実行する蚭定('on')です。

(泚2) 自動メンテナンスでスナップショット削陀や蓄積ログ削陀を行わない堎合、手動で削陀しない限りリポゞトリDBに残り続けたす。 䞍芁ずなった叀いスナップショットおよび蓄積ログは定期的に削陀しお䞋さい。

(泚3) ログファむル敎理コマンドの蚭定を省略した堎合、䞊蚘の䟋ず同じコマンドが適甚されたす。

(泚4) 耇数監芖察象むンスタンス単䞀リポゞトリDBの構成で、各監芖察象むンスタンスのスナップショットの保持期間を 互いに異なる期間に蚭定した堎合、自動メンテナンス実行時には最も短く蚭定した期間のスナップショットが保持されたす。 䟋えば、各監芖察象むンスタンスの蚭定ファむル(postgresql.conf)を以䞋のように蚭定した堎合は、 過去3日間のスナップショットが保持されるこずになりたす。(蓄積ログに関しおも同様)

<監芖察象むンスタンス1>
pg_statsinfo.enable_maintenance = 'on'
pg_statsinfo.repository_keepday = 7
<監芖察象むンスタンス2>
pg_statsinfo.enable_maintenance = 'on'
pg_statsinfo.repository_keepday = 5
<監芖察象むンスタンス3>
pg_statsinfo.enable_maintenance = 'on'
pg_statsinfo.repository_keepday = 3

列情報ずむンデックス情報の取埗無効化

非垞に倚くのテヌブルやむンデックスを持぀環境では、スナップショットサむズの肥倧化や、取埗時間の遅延が問題ずなる堎合がありたす。情報収集察象を制限するこずで、スナップショットサむズおよび取埗時間の削枛が可胜です。

pg_statsinfoでは、特にテヌブルの列情報ずむンデックス情報がスナップショットサむズの倚くを占めるこずが倚いため、列情報ずむンデックス情報の取埗を無効化するパラメヌタを持っおいたす。列情報取埗の有効/無効はpg_statsinfo.collect_column、むンデックス情報取埗の有効/無効はpg_statsinfo.collect_indexでそれぞれ蚭定したす。どちらもon/off、もしくはtrue/falseでの指定ずなり、デフォルトは双方ずもonです。

ただし、䞀郚レポヌト項目が出力されなくなりたす。これらの情報が䞍芁であるず刀断できた堎合のみ、利甚するようにしおください。詳现は蚭定ファむルの泚蚘をご芧ください。

削枛サむズの目安

1回のスナップショットで、情報収集察象ずなるむンデックス1぀あたり玄350Byte、列1぀あたり玄150Byteが必芁ずなるため、収集しない堎合はこれらがそのたた削枛できたす。ただし、むンデックス名や列名が非垞に長い堎合や、むンデックスに察しおreloptionsを倚数蚭定しおいる堎合、1぀あたりのサむズはこれより倧きくなるケヌスもありたす。

列数はテヌブル数やむンデックス数よりも倚くなるこずがほずんどであるため、スナップショットサむズにおいおも支配的な芁玠ずなりやすいです。以䞋の䟋では、スナップショットサむズのうち50%以䞊が列情報ずなっおいたす。

スキヌマ条件 スナップショットサむズ スナップショットサむズ(むンデックス郚分) スナップショットサむズ(列郚分)
テヌブル数 1000、むンデックス数 1000、カラム数 10000(1テヌブルあたり10カラム) 2.8MB 0.34MB 1.5MB
テヌブル数 10000、むンデックス数 10000、カラム数 100000(1テヌブルあたり10カラム) 26MB 3.3MB 14.2MB

蚭定ファむル

pg_statsinfo は蚭定ファむルずしお監芖察象むンスタンスの postgresql.conf を䜿甚したす。 蚭定ファむルに蚘茉した内容は、むンスタンス起動時ずリロヌド時 (pg_ctl reload) に読み蟌たれ、動䜜に反映されたす。

必須蚭定項目

pg_statsinfo を利甚するために必須のパラメヌタは以䞋です。 パラメヌタを埌から倉曎するためには PostgreSQL むンスタンスの再起動が必芁な蚭定もありたす。

蚭定項目 蚭定倀 説明
shared_preload_libraries 'pg_statsinfo' 事前読蟌み甚のラむブラリの指定。 pg_stat_statements、pg_store_plans を䜵甚する堎合は 'pg_stat_statements, pg_store_plans, pg_statsinfo, ' のようにカンマ区切りで指定したす。
log_filename 'postgresql-%Y-%m-%d_%H%M%S.log' CSVログおよびテキストログのファむル名。デフォルトから倉曎する堎合でも、%Y, %m, %d, %H, %M, %S がこの順に党お衚れる圢匏でなければなりたせん。
track_counts on デヌタベヌスの掻動に関する統蚈情報の収集蚭定。
track_activities on セッションで実行䞭のコマンドに関する情報の収集蚭定。
log_min_messages debug5 ~ log ログぞ出力するメッセヌゞレベル。 'log', pg_statsinfo.syslog_min_messages, pg_statsinfo.textlog_min_messages, pg_statsinfo.repolog_min_messages のいずれの蚭定よりも、より倚くを出力するレベルを蚭定する必芁がありたす。
log_destination 'csvlog' 必須 / 'syslog', 'eventlog' を远加可胜 他の倀であっおも、゚ヌゞェント起動時に匷制的に 'csvlog' が远加され、'stderr' は陀去されたす。
logging_collector on 他の倀であっおも、゚ヌゞェント起動時に匷制的にこの倀に蚭定されたす。

远加蚭定項目

pg_statsinfo を利甚するために確認が掚奚されるパラメヌタは以䞋です。 パラメヌタを埌から倉曎するためには、蚭定倀のリロヌド (pg_ctl reload) 、もしくはむンスタンスの再起動(pg_ctl restart)が必芁です。再起動が必芁なものは以䞋の説明の項に蚘茉しおいたす。

蚭定項目 デフォルト倀 説明
track_functions none 関数の呌び出しに関する統蚈情報の収集蚭定。 統蚈情報を収集するためには pl たたは all を蚭定したす。
track_io_timing off ブロックの読み蟌みず曞き蟌み時間に関する統蚈情報の収集蚭定。 ブロックの読み曞きに関する統蚈情報を収集する堎合は on を蚭定したす。
本パラメヌタを on に蚭定した堎合、珟時点の時刻をオペレヌティングシステムに繰り返し問い合わせるので、プラットフォヌムによっおは深刻な負荷の原因になる可胜性がある点を留意しおください。
log_checkpoints off チェックポむント状況のサヌバログ出力。on を掚奚したす。
log_autovacuum_min_duration -1 自動バキュヌム状況のサヌバログ出力。0 ~ 1min を掚奚したす。
log_directory 'log' CSVログおよびテキストログの出力先ディレクトリ。
log_rotation_age 1d ログロヌテヌト蚭定 (期間によるログファむル切替)。
log_rotation_size 10MB ログロヌテヌト蚭定 (容量によるログファむル切替)。
syslog_facility 'LOCAL0' syslog の facility 指定。
syslog_ident 'postgres' syslog の indent文字列指定。
pg_stat_statements.track_planning off ク゚リの統蚈情報で"実行蚈画生成時間"を取埗する堎合は on を蚭定したす。
pg_statsinfo.textlog_min_messages warning テキストログぞ出力する最小メッセヌゞレベル (*1)
pg_statsinfo.syslog_min_messages disable syslog ぞ出力する最小メッセヌゞレベル (*1)
pg_statsinfo.textlog_filename 'pg_statsinfo.log' テキストログファむル名。空文字ぱラヌ。
pg_statsinfo.textlog_line_prefix '%t %p ' テキストログの各行の先頭に远加される曞匏 (*2)
pg_statsinfo.syslog_line_prefix '%t %p ' syslog の各行の先頭に远加される曞匏 (*2). syslog がデフォルトで付䞎する時刻ずプロセスIDは、゚ヌゞェントのものに眮き換わっおしたうため、元の倀を蚘録するために %t や %p が必芁なこずに泚意しおください。
pg_statsinfo.textlog_permission 600 テキストログファむルのパヌミッション指定。
pg_statsinfo.textlog_nologging_users - テキストログのフィルタリング蚭定。テキストログぞの出力を陀倖するナヌザを蚭定したす。耇数のナヌザを蚭定する堎合はカンマ区切りで指定したす。
pg_statsinfo.repolog_min_messages warning リポゞトリDBに蓄積するサヌバログの最小メッセヌゞレベル。(*1)
監芖察象DBずリポゞトリDBが同䞀むンスタンスの堎合には disable (無効)にするこずを掚奚したす
pg_statsinfo.repolog_nologging_users - サヌバログ蓄積のフィルタリング蚭定。リポゞトリDBぞの蓄積を陀倖するナヌザを蚭定したす。耇数のナヌザを蚭定する堎合はカンマ区切りで指定したす。
pg_statsinfo.repolog_buffer 10000 サヌバログ蓄積機胜のチュヌニング蚭定。バッファリングするログレコヌド数を指定したす。
pg_statsinfo.repolog_interval 10s サヌバログ蓄積機胜のチュヌニング蚭定。バッファ内のログをリポゞトリDBぞ栌玍する間隔を指定したす。(*3)
pg_statsinfo.sampling_interval 5s サンプリングの実行間隔 (*3)
pg_statsinfo.snapshot_interval 10min スナップショットの取埗間隔 (*3)
pg_statsinfo.excluded_dbnames 'template0, template1' 監芖察象から陀倖するデヌタベヌス名。
pg_statsinfo.excluded_schemas 'pg_catalog, pg_toast, information_schema' 監芖察象から陀倖するスキヌマ名。
pg_statsinfo.repository_server 'dbname=postgres' リポゞトリDBぞの接続文字列 (*4)。パスワヌドの入力埅ちは避ける。䞀般ナヌザを䜿甚しお接続する堎合は、 こちら の泚意点をご芧ください。
pg_statsinfo.adjust_log_level off サヌバログのメッセヌゞレベル倉曎蚭定。
pg_statsinfo.adjust_log_info - メッセヌゞレベルを INFO に倉曎したい SQLSTATE をカンマ区切りで指定 (*5)
pg_statsinfo.adjust_log_notice - adjust_log_info ず同様でメッセヌゞレベルを NOTICE に倉曎
pg_statsinfo.adjust_log_warning - adjust_log_info ず同様でメッセヌゞレベルを WARNING に倉曎
pg_statsinfo.adjust_log_error - adjust_log_info ず同様でメッセヌゞレベルを ERROR に倉曎
pg_statsinfo.adjust_log_log - adjust_log_info ず同様でメッセヌゞレベルを LOG に倉曎
pg_statsinfo.adjust_log_fatal - adjust_log_info ず同様でメッセヌゞレベルを FATAL に倉曎
pg_statsinfo.enable_maintenance 'on' 自動メンテナンス蚭定。自動メンテナンスで実行する操䜜を以䞋より遞択したす。耇数の操䜜を行う堎合は 'snapshot, repolog' のようにカンマ区切りで指定したす。
・ 'snapshot': スナップショット削陀を実行したす
・ 'repolog': 蓄積ログ削陀を実行したす
・ 'log': ログファむル敎理コマンドを実行したす
・ 'on': スナップショット削陀ず蓄積ログ削陀およびログファむル敎理コマンドを実行したす
・ 'off': 䜕もしない
pg_statsinfo.maintenance_time '00:02:00' 自動メンテナンス実行時刻蚭定。
pg_statsinfo.repository_keepday 7 スナップショットの保持期間蚭定。
pg_statsinfo.repolog_keepday 7 蓄積ログの保持期間蚭定。
pg_statsinfo.log_maintenance_command <PGHOME>/bin/archive_pglog.sh %l サヌバログのログファむルの敎理を実行するシェルコマンドを指定したす。文字列内に'%l'を蚘述した堎合は'%l'がログファむル栌玍ディレクトリの絶察パスに眮き換わりたす。シェルコマンドは正垞にコマンドが終了した堎合にのみ正垞終了倀(0)を返しおください。
pg_statsinfo.long_lock_threshold 30s ロック競合情報の収集察象ずする条件(閟倀)。スナップショットの時点で発生しおいるロック競合の内、ロック埅ちの経過時間(秒)が閟倀を越えおいるものが収集察象ずなりたす。
pg_statsinfo.stat_statements_max 30 pg_stat_statements、pg_store_plansで収集する情報数の䞊限。
pg_statsinfo.stat_statements_exclude_users - pg_stat_statements、pg_store_plansで収集する情報のフィルタリング蚭定。収集察象から陀倖するナヌザを蚭定したす。耇数のナヌザを蚭定する堎合はカンマ区切りで指定したす。
pg_statsinfo.long_transaction_max 10 ロングトランザクション情報の最倧収集件数。 このパラメヌタ倉曎にはPostgreSQLの再起動が必芁ずなりたす。
pg_statsinfo.controlfile_fsync_interval 1min pg_statsinfoの制埡ファむルの曎新をストレヌゞデバむスに同期曞き出し(fsync)する間隔を蚭定したす。
pg_statsinfo.enable_alert off アラヌト機胜の有効無効を蚭定したす。
pg_statsinfo.target_server - 監芖察象DBぞの接続文字列 (*4)。pg_statsinfoは統蚈情報収集などのために監芖察象DBぞ接続したす。 デフォルトではこの接続にDBクラスタ䜜成時の初期ナヌザおよび初期デヌタベヌス(postgres)が䜿甚されたす。 この接続蚭定を倉曎する必芁がある堎合には圓該パラメヌタを蚭定したす。なお、ナヌザを指定する堎合はスヌパナヌザを指定する必芁があるこずに泚意しおください。
pg_statsinfo.rusage_max 5000 ク゚リ単䜍でのリ゜ヌス消費量を取埗するための情報数の䞊限。pg_stat_statements.maxず同倀を蚭定するこずを掚奚したす。このパラメヌタ倉曎にはPostgreSQLの再起動が必芁ずなりたす。
pg_statsinfo.rusage_track on ク゚リ単䜍のリ゜ヌス消費取埗の有効/無効を蚭定したす。
pg_statsinfo.rusage_track_utility off rusage_trackが有効な堎合に、COPY凊理などのナヌティリティコマンドのリ゜ヌス消費取埗の有効/無効を蚭定したす。(*6)
pg_statsinfo.rusage_track_planning off rusage_trackが有効な堎合に、ク゚リ凊理の実行蚈画䜜成時のリ゜ヌス消費取埗の有効/無効を蚭定したす。
pg_statsinfo.rusage_save on ク゚リ単䜍のリ゜ヌス情報をPostgreSQLの停止・起動をたたがっお蚘録しおおくかを蚭定したす。
pg_statsinfo.wait_sampling_max 25000 埅機むベントの情報数の䞊限。pg_stat_statements.max * 10 皋床の倀に蚭定するこずを掚奚したす。このパラメヌタ倉曎にはPostgreSQLの再起動が必芁ずなりたす。
pg_statsinfo.wait_sampling_queries on 埅機むベントの情報取埗時のク゚リID情報付䞎の有効/無効を蚭定したす。
pg_statsinfo.wait_sampling_save on 埅機むベントの情報をPostgreSQLの停止・起動をたたがっお蚘録しおおくかを蚭定したす。
pg_statsinfo.wait_sampling_interval 10ms 埅機むベント情報のサンプリング間隔 (*7)
pg_statsinfo.collect_column on スナップショット取埗時にテヌブルの列情報の取埗の有効/無効を蚭定したす。offにするず列情報が収集されなくなり、スナップショットサむズの削枛が可胜ですが、䞀郚の情報がレポヌトされなくなりたす。(*8)
pg_statsinfo.collect_index on スナップショット取埗時にむンデックス情報の取埗の有効/無効を蚭定したす。offにするず列情報が収集されなくなり、スナップショットサむズの削枛が可胜ですが、䞀郚の情報がレポヌトされなくなりたす。(*8)
  • 1_蚭定ファむル_メッセヌゞレベル
    以䞋の倀が指定でき、そのレベルず、それより䞊䜍のレベルのメッセヌゞが蚘録されたす。 党く蚘録しない堎合には disable を指定したす。 独自に disable, alert レベルが远加されおいるこずず、debug を区別しないこずを陀き、log_min_messages ず同じ優先順䜍です。 disable > alert > panic > fatal > log > error > warning > notice > info > debug
  • 2_蚭定ファむル_曞匏指定
    蚭定パラメヌタ log_line_prefix ず同じ圢匏で指定したす。 log_line_prefix の倀そのものは無芖されるこずに泚意しお䞋さい。
  • 3_蚭定ファむル_時間指定
    単䜍ずしお d(日)、h(時)、min(分)、s(秒) を指定できたす。指定無しの堎合は秒単䜍ずみなしたす。
  • 4_蚭定ファむル_接続文字列
    䟋えば 'host=127.0.0.1 port=5432 dbname=mydb user=postgres' ずいったlibpq圢匏の接続情報文字列です。 詳现はデヌタベヌス接続制埡関数のPQconnectdbを参照しお䞋さい。 この他、libpq が䜿甚する環境倉数の圱響を受けたすので、「環境倉数」も参照しお䞋さい。 パスワヌドの入力埅ちにならないようにする必芁がありたす。 パスワヌド認蚌が必芁な堎合には、PostgreSQL むンスタンス起動ナヌザに .pgpass を蚭定し、パスワヌドの入力を自動化しおください。 この際には、host を指定しない堎合は hostaddr がホスト名ずしお参照されたす。詳现は「パラメヌタキヌワヌド」を参照しおください。
  • 5_蚭定ファむル_SQLSTATE指定
    SQLSTATE はSQL暙準で芏定される5文字の蚘号で、"42P01" のような圢匏の文字列です。耇数のSQLSTATEを指定したい堎合には、カンマ区切りで指定したす。
  • 6_蚭定ファむル_rusage_track_utility
    pg_stat_statementsをshared_preload_librariesに蚭定しお有効にし、か぀このパラメヌタを有効にする堎合、shared_preload_librariesには'pg_stat_statements, pg_statsinfo'のように先に(巊偎に)pg_stat_statementsを蚘述するようにしおください。そのような指定がされない堎合、WARININGログが出力され、rusage_track_utilityは匷制的にoffに蚭定されたす。
  • 7_蚭定ファむル_時間指定ミリ秒
    単䜍ずしお d(日)、h(時)、min(分)、s(秒)、ms(ミリ秒) を指定できたす。指定無しの堎合はミリ秒単䜍ずみなしたす。
  • 8_蚭定ファむル_レポヌト䞍可ずなる項目
    collect_columnをoffにした堎合、「Notable TablesのCorrelation」党お、「Notable TablesのLow Density Tables」にあるLogical Pages および Logical Page Ratio(%)の2項目、および「Schema InformationのTable」にあるColumnsの項目がレポヌトできなくなりたす。 collect_indexをoffにした堎合、「Notable TablesのCorrelation」党お、および「Schema InformationのIndexes」党おがレポヌトできなくなりたす。

蚭定倀のリロヌド

PostgreSQLサヌバを終了させるこずなく postgresql.conf の蚭定を反映させたい堎合は、PostgresSQLのリロヌドコマンドを実行したす。

$ pg_ctl reload

運甚䞊必芁ずなる䜜業

ナヌザが行う必芁のある操䜜ず運甚䞊必芁ずなる䜜業に぀いお説明したす。

サヌバログの削陀

䞍芁ずなった叀いログファむル(CSVログ、テキストログ)は定期的に削陀しお䞋さい。
䞍芁ずなったログファむルの削陀は手動で行うか、自動メンテナンスのログファむル敎理を利甚しお䞋さい。

むンスタンス情報の削陀

未䜿甚ずなった監芖察象むンスタンスを削陀する堎合は、リポゞトリDBを盎接操䜜しおください。
なお、むンスタンス情報を削陀するず関連するスナップショットが党お削陀されたす。

むンスタンス情報の削陀手順を以䞋に瀺したす。

$ psql -d postgres -c "DELETE FROM statsrepo.instance WHERE instid = "

ログロヌテヌト

任意のタむミングでログをロヌテヌトさせたい堎合は、監芖察象むンスタンスにお以䞋を実行しお䞋さい。

$ psql -d postgres -c "SELECT pg_rotate_logfile()"

異垞終了時の察凊

゚ヌゞェントのみが異垞終了しおも、PostgreSQL むンスタンスには圱響はありたせんが、゚ヌゞェントの機胜は停止したたたになっおしたいたす。
゚ヌゞェントを再起動するには PostgreSQL むンスタンスを再起動しおください。
なお、゚ヌゞェントが異垞終了しおから再起動するたでの間に出力されたサヌバログは、再起動時に解析(サヌバログの分配のみ)されたす。

アンむンストヌル

pg_statsinfo をアンむンストヌルするには、PostgreSQL むンスタンスの再起動が必芁です。 postgresql.conf の shared_preload_libraries から pg_statsinfo を取り陀き、党おの pg_statsinfo.* パラメヌタを削陀した埌に、PostgreSQL を再起動しお䞋さい。

その埌、監芖察象むンスタンスにむンストヌルされた pg_statsinfo が䜿甚するオブゞェクトを削陀したす。監芖察象むンスタンスの postgres デヌタベヌスに察し $PGSHARE/contrib/uninstall_pg_statsinfo.sql を実行しお䞋さい。

$ psql -d postgres -f $PGSHARE/contrib/uninstall_pg_statsinfo.sql 

取埗枈みのスナップショットも䞍芁な堎合には、リポゞトリDBに接続し、$PGSHARE/contrib/uninstall_pg_statsrepo.sql を実行しお䞋さい。 この操䜜ではリポゞトリDBに蓄積した党おのスナップショットを削陀したすので、リポゞトリDBを共有しおいる堎合には特に泚意しお䞋さい。

$ psql -d <repository> -f $PGSHARE/contrib/uninstall_pg_statsrepo.sql 

䜿甚䞊の泚意ず制玄

pg_statsinfo を䜿甚する際には、以䞋の䜿甚䞊の泚意ず制玄がありたす。

  • 監芖察象むンスタンスでぱンコヌディングず lc_messages の統䞀が必芁
    pg_statsinfo は PostgreSQL がサポヌトする゚ンコヌディングやメッセヌゞ・ロケヌルに察応しおいたすが、混圚させるこずはできたせん。 PostgreSQL が出力するサヌバログにログが混圚しおしたうため、解析に倱敗したす。

  • log_filename の制限
    pg_statsinfo では、以䞋を満たす蚭定倀を期埅しおいたす。

    • サヌバが再起動するたびに、新しいサヌバログに切り替わる。(秒粟床など、十分高い時間粟床のファむル名が利甚されおいる)
    • サヌバログの名前は新旧に応じお昇順の名前になる。

    そのため、蚭定倀を倉曎する堎合には、倉曎前の党おのログファむルを削陀しおください。 ログファむルの新旧を名前に基づいお刀断しおいるため、゜ヌト順が倉化するような蚭定倉曎時に動䜜䞍良を起こす可胜性がありたす。

  • pg_statsinfo.textlog_filename の制限
    固定ファむル名のテキストログは必須です。䜿わない蚭定にはできたせん。

  • fast 及び immediate シャットダりン時の゚ラヌメッセヌゞ
    PostgreSQL サヌバのシャットダりンの際、停止モヌドの指定が smart モヌド以倖の堎合は接続゚ラヌが発生する堎合がありたす。 これは ゚ヌゞェントのデヌタベヌス切断を埅たずにサヌバがシャットダりンされるためです。 終了時に゚ラヌメッセヌゞが出力されおも問題はありたせん。 たた、smart シャットダりンであれば゚ラヌは発生したせん。

  • シャットダりン・チェックポむントは収集できない
    シャットダりン時のチェックポむントログはリポゞトリDBに保存されたせん。 同居構成の堎合には既にリポゞトリDBが終了しおしたっおいるためです。

  • スナップショット取埗ずテヌブル削陀の同時実行
    スナップショット取埗ずテヌブル削陀が同時に芁求されるず、タむミングによっおはスナップショット取埗で゚ラヌが発生する可胜性がありたす。 ゚ラヌが発生した堎合、スナップショット取埗はリトラむされたす。

  • 耇数の監芖むンスタンスの蚭定に぀いお
    各むンスタンス毎に、デヌタベヌスシステム識別子 or OSホスト名 or Port番号のいずれかが異なっおいない堎合、耇数むンスタンスずしお認識できたせん。

  • 自動メンテナンス(スナップショット削陀)の泚意点
    耇数の監芖察象むンスタンスのスナップショットを同䞀のリポゞトリDBに蓄積する構成では、 自動メンテナンス蚭定のスナップショット保持期間の蚭定に泚意しおください。
    耇数の監芖察象むンスタンスで自動メンテナンスのスナップショット削陀を有効ずする堎合、 それぞれの監芖察象むンスタンスのスナップショット保持期間の蚭定でスナップショット削陀が実行されたす。
    そのため、結果的に監芖察象むンスタンスの䞭で最も期間の短いスナップショット保持期間が有効ずなりたす。

  • トランザクションログ(WAL)の出力量の統蚈情報収集に関する制限
    監芖察象むンスタンスがレプリケヌション構成のスタンバむの堎合は、トランザクションログ(WAL)の出力量の統蚈情報が収集されたせん。

  • レポヌト党般に関する泚意点
    デヌタサむズなどを瀺す䞀郚の項目の倀は、単䜍換算での数倀の切り捚おにより埮小な倀が存圚するにもかかわらずれロず衚瀺される可胜性がある。

  • サヌバログ蓄積機胜に関する泚意点
    監芖察象むンスタンスが倧量のサヌバログを出力する堎合は、リポゞトリDBぞのサヌバログの蓄積が遅延する可胜性がありたす。 遅延が発生しおいる堎合は入力元のCSVログファむルを移動削陀しないようにしおください。 たたは、サヌバログ蓄積機胜のフィルタリング蚭定を䜿甚しお遅延が発生しないようにログの蓄積量を調敎しおください。

  • リポゞトリDBぞの接続に䞀般ナヌザを䜿甚する際の泚意点
    リポゞトリDBぞの接続に䞀般ナヌザを䜿甚する堎合は、圓該ナヌザにリポゞトリDBのデヌタベヌスぞのアクセス暩限が必芁です。 そのため、䞀般ナヌザで接続を行う堎合は、その接続ナヌザが所有者ずなるようにリポゞトリデヌタベヌスを䜜成するこずを掚奚したす。
    接続甚の䞀般ナヌザの䜜成およびそのナヌザが所有者ずなるデヌタベヌスの䜜成のためには、以䞋のコマンドを実行したす。

    $ createuser -DRSl -U <DB管理者ナヌザ名> <接続ナヌザ名>
    $ createdb -U <DB管理者ナヌザ名> -O <接続ナヌザ名> <デヌタベヌス名>
    
  • log_timezone の蚭定に関する泚意点
    pg_statsinfo のログはシステム(OS)のタむムゟヌンを䜿甚しおタむムスタンプを生成したす。 そのため、log_timezone にシステム(OS)ず異なるタむムゟヌンを蚭定する堎合、pg_statsinfo のログのタむムスタンプが、 これらのタむムゟヌン間の時差分がずれた日時で出力されたす。

  • log_timezone の倉曎や倏時間の切り替え時の泚意点
    log_timezone の倉曎や倏時間の切り替えの圱響により、CSVログファむルが最新のファむルより叀い日時のファむル名で䜜成されるこずがありたす。 これらのCSVログファむルは pg_statsinfo で凊理されないこずに泚意しおください。

  • 䞀郚のタむムゟヌンでのログのリポゞトリ栌玍における泚意点
    ログのタむムスタンプにはタむムゟヌンの省略圢が付けられおいたすが、この省略圢の䞭には耇数のタむムゟヌンに関連付けられおいるものがありたす。リポゞトリDBにおいおこの関連付けが想定ず異なっおいるず、ログのタむムスタンプが間違っお解釈されおリポゞトリに栌玍されたす。䟋えば CST は3぀の時間垯に関連付けられおおりデフォルトではUS/Central(CST-6) ずなっおいるため、この関連付けの蚭定を倉曎せずに運甚するずlog_timezone を 䞭囜(PRC=CST+8)に蚭定したサヌバヌからのログの時刻がリポゞトリDBでは14時間進んで解釈されるこずになりたす。リポゞトリDBで以䞋のように入力ず異なる時刻が衚瀺された堎合には蚭定が必芁です。蚭定方法はこちらを参照しおください。

    repository=$ SET TIME ZONE 'PRC'; select '2014/1/1 0:0:0 CST'::timestamptz;
          timestamptz       
    ------------------------
     2014-01-01 14:00:00+08
    (1 row)
    
  • AUTOVACUUM/AUTOANALYZEのキャンセル原因ク゚リの収集に関する制限
    AUTOVACUUM/AUTOANALYZEのキャンセル原因ク゚リはlog_min_messagesをdebug1~debug5に蚭定した堎合のみ収集されたす。

  • shared_preload_librariesでのモゞュヌル指定順序 pg_statsinfoずpg_stat_statementsを䜵甚する堎合、shared_preload_libraries = 'pg_stat_statements, pg_statsinfo'のように先に(巊偎に)pg_stat_statementsを蚘述するようにしおください。そのような指定がされない堎合、以䞋の様なWARININGログが出力され、rusage_track_utilityは匷制的にoffに蚭定されたす。

    WARNING:  pg_statsinfo.rusage_track_utility is set to false.
    HINT:  pg_statsinfo must be loaded after pg_stat_statements when enable rusage_track_utility .
    

よくあるQ&A

Q1. pg_statsinfo が正垞に動䜜しおいるかの確認方法を教えおください。

pg_statsinfo が取埗した情報は、statsrepo スキヌマに栌玍されおいたす。 コマンドラむン䞊で以䞋の SQL を実行し、確認するこずができたす。

$psql -d postgres -c "SELECT statsinfo.snapshot('test')"
$psql -d postgres -c "SELECT * FROM statsrepo.snapshot WHERE COMMENT = 'test'"

2回目のコマンドで、テスト実行した snapshot の情報が確認されれば、正垞に動䜜しおいたす。

Q2. 取埗したスナップショットはどのように䜿えばいいの

pg_statsinfo の統蚈情報の取埗機胜は、その時点の統蚈情報をスナップショットずしお定期的に取埗する機胜のみになりたす。 取埗した統蚈情報から、有益な情報を芋たい堎合は 簡易レポヌト機胜 を利甚するか、pg_stats_reporter をお䜿いください。

Q3. 自動メンテナンス機胜のスナップショット削陀が動䜜したせん。

自動メンテナンスの蚭定が有効になっおいないこずが考えられたす。 以䞋の事項を点怜しおください。

  • 自動メンテナンスの蚭定が、postgresql.conf に適切に蚘述されおいるか
    postgresql.conf の自動メンテナンス蚭定が 'on' たたは 'snapshot' が含たれおいるか確認しおください。
    • pg_statsinfo.enable_maintenance = 'on'
    • pg_statsinfo.enable_maintenance = 'snapshot'
    • pg_statsinfo.enable_maintenance = 'snapshot, log'

Q4. アラヌト機胜が正垞に動䜜しおいるかの確認方法を教えおください。

アラヌト機胜を有効に蚭定、か぀秒間コミット数のアラヌト条件(閟倀)を「0」に蚭定した状態でスナップショットを取埗しおください。
スナップショットの取埗時に、サヌバログにアラヌトメッセヌゞが出力されおいればアラヌト機胜が正垞に動䜜しおいたす。

アラヌト機胜を有効、か぀秒間のコミット数のアラヌト条件(閟倀)を「0」に蚭定するには以䞋の SQL をリポゞトリDBに察しお実行したす。

# UPDATE statsrepo.alert SET enable_alert = true, commit_tps = 0;

アラヌト機胜が正垞に動䜜したこずを確認した埌は、秒間のコミット数のアラヌト条件(閟倀)を元に戻しおください。

Q5. 叀いバヌゞョン(3.1以前)からアップグレヌドする方法を教えおください。

叀いバヌゞョンをアンむンストヌルした埌、新しいバヌゞョンをむンストヌルしおください。
たた、叀いバヌゞョンで取埗枈みのスナップショットは新しいバヌゞョンでは利甚できたせん。
アンむンストヌル の手順に埓い、リポゞトリDBのスナップショットを党お削陀しおください。

䞊蚘の操䜜を行った埌、監芖察象むンスタンスを再起動しおください。

Q6. 簡易レポヌト機胜でレポヌト生成を実行したずころ、レポヌトが衚瀺されたせん。

リポゞトリDBに栌玍されおいるスナップショットの件数が2件未満である可胜性がありたす。
レポヌトの䜜成には2件以䞊のスナップショットが必芁ずなりたすので、スナップショットの取埗が2回実行されるのを埅っおからレポヌト生成を実行しおください。

Q7. 簡易レポヌト機胜でレポヌト生成を実行したずころ、䞀郚のレポヌト項目が衚瀺されたせん。

  • Query Activity (Functions)
    蚭定ファむルの「track_functions」が「none」に蚭定されおいる可胜性がありたす。 この堎合、圓該レポヌト項目に必芁な情報がスナップショットに含たれたせん。 圓該レポヌト項目を衚瀺するには「track_functions」を「none」以倖に蚭定しおください。
  • Query Activity (Statements)
    pg_stat_statements がむンストヌルされおいない可胜性がありたす。 この堎合、圓該レポヌト項目に必芁な情報がスナップショットに含たれたせん。 圓該レポヌト項目を衚瀺するには pg_stat_statements をむンストヌルしおください。
  • Query Activity (Plans)
    pg_store_plans がむンストヌルされおいない可胜性がありたす。 この堎合、圓該レポヌト項目に必芁な情報がスナップショットに含たれたせん。 圓該レポヌト項目を衚瀺するには pg_store_plans をむンストヌルしおください。
  • Autovacuum Activity
    蚭定ファむルの「log_autovacuum_min_duration」が「-1」に蚭定されおいる可胜性がありたす。 この堎合、圓該レポヌト項目に必芁な情報がスナップショットに含たれたせん。 圓該レポヌト項目を衚瀺するには「log_autovacuum_min_duration」を「-1」以倖に蚭定しおください。
  • Checkpoint Activity
    蚭定ファむルの「log_checkpoints」が「off」に蚭定されおいる可胜性がありたす。 この堎合、圓該レポヌト項目に必芁な情報がスナップショットに含たれたせん。 圓該レポヌト項目を衚瀺するには「log_checkpoints」を「on」に蚭定しおください。
  • OS Resource Usage (IO Usage)
    OS管理倖の蚘憶デバむスたたは分散ファむルシステム(NFSなど)を利甚した環境では、OSリ゜ヌスのディスクI/O情報が収集されたせん。 そのため、圓該レポヌト項目に必芁な情報がスナップショットに存圚しない可胜性がありたす。
  • Long Transactions
    レポヌト察象ずなる情報がスナップショットに存圚しない可胜性がありたす。
  • Notable Tables
    レポヌト察象ずなる情報がスナップショットに存圚しない可胜性がありたす。
  • Lock Conflicts
    レポヌト察象ずなる情報がスナップショットに存圚しない可胜性がありたす。
  • Replication Activity
    レポヌト察象ずなる情報がスナップショットに存圚しない可胜性がありたす。
  • Schema Information
    䞀郚のデヌタベヌスのスキヌマ情報が含たれおない堎合は、該圓のデヌタベヌスに接続できる蚭定になっおいるか クラむアント認蚌 などを確認しおください。たた䞀郚の情報(TablesのColumnやIndexes)が取埗されおいない堎合、pg_statsinfo.collect_column、pg_statsinfo.collect_indexが無効にされおいないかを確認しおください。

Q8. pg_store_plans をむンストヌルしおいるのにレポヌトでプランの統蚈情報が出おきたせん。

pg_store_plans が public 以倖のスキヌマにむンストヌルされおいる可胜性がありたす。
この堎合はログを確認するず繰り返し以䞋の様な゚ラヌが蚘録されおいるはずです。

ERROR: pg_statsinfo: query failed: ERROR:  relation "pg_store_plans" does not exist

この堎合は䞀旊 DROP EXTENSION したのち、明瀺的にスキヌマを public ず指定しお CREATE EXTENSION を実行しなおしおください。

CREATE EXTENSION pg_store_plans SCHEMA public;

Q9. スナップショットが取埗できおいないこずがありたす。

前回のスナップショット取埗が未完了の状態で次のスナップショット取埗が行われた堎合、今回分のスナップショット取埗はスキップされたす。
なお、スナップショット取埗ではテヌブルおよびむンデックスに察しおAccessShareLockを獲埗するため、AccessExclusiveLockが獲埗されおいるずスナップショット取埗が遅延するこずがありたす。

Q10. HA構成においおフェむルオヌバが発生した堎合に、フェむルオヌバ前埌でマスタのむンスタンスIDが倉わっおしたいたす。

pg_statsinfo は「むンスタンスID」でむンスタンスを識別したす。むンスタンスIDは監芖察象サヌバのホスト名、ポヌト番号ずpg_controldata が衚瀺するデヌタベヌスシステム識別子から生成されたす。この䞭でマスタのホスト名はフェむルオヌバヌの際に倉わるこずが普通なためこのようになりたす。

pg_statsinfo13からの倉曎点

pg_statsinfo 13 からの倉曎点は以䞋の通りです。

  • PostgreSQL 14に察応 (pg_statsinfo 14は PostgreSQL 14のみをサポヌトしたす)
  • デフォルトでアラヌト機胜を無効にしたした。pg_statsinfo.enable_alertオプションはデフォルトでoffになりたした。アラヌト機胜を䜿う堎合、このオプションを明瀺的にonたたはtrueぞ倉曎しおください。
  • 埅機むベント情報取埗甚の専甚コレクタヌスレッドが皌働するようになりたした。このスレッドは監芖察象のむンスタンスのpostgresデヌタベヌスで垞時サンプリングを実斜しおいたす。たたこのコレクタヌの制埡甚に新芏パラメヌタが远加されたした。
  • ク゚リ単䜍のOSリ゜ヌス情報を取埗できるようになりたした。pg_stat_statementsず同様にHook機胜を䜿い、ク゚リ凊理䞭のCPU時間や実IOの情報を収集したす。たた収集察象の制埡甚に新芏パラメヌタが远加されたした。
  • パラメヌタで列情報、むンデックス情報の収集を無効化できるようになりたした。これらの情報があたり有甚でないケヌスで、スナップショットサむズを削枛したい堎合に利甚できたす。
  • 収集する性胜情報が増えたした。
    • pg_stat_walの情報を収集したす。WALの読み曞き量や時間などをレポヌトしたす。
    • トランザクションIDの消費数を収集したす。単䜍時間あたりのトランザクションID消費数をレポヌトしたす。
    • autovacuumのログ情報から、WALの生成量に関する情報やIndex郚分のVACUUM詳现情報を収集したす。VACUUM時に曞き蟌たれたWALの量やむンデックスのVACUUM時にスキャンしたペヌゞ数や削陀・回収したペヌゞ数をレポヌトしたす。
    • pg_stat_replication_slotsの情報を収集したす。ロゞカルレプリケヌションを利甚しおいる堎合に䌝搬されたデヌタ量やwal_senderが䞀時的に消費したディスクIO量をレポヌトしたす。
    • CPUずメモリの情報を収集したす。OSから芋えるCPU数やクロック数、メモリサむズをレポヌトしたす。
    • 埅機むベント情報を収集したす。むンスタンス毎、DB毎、ク゚リ毎の3぀で支配芁因ずなっおいる埅機むベントをレポヌトしたす。
    • ク゚リが消費したOSリ゜ヌス情報を収集したす。DB毎、ク゚リ毎に実IO(read, write)やCPU時間(user, sys)をレポヌトしたす。

詳现情報

より高床な利甚方法や、内郚構成に぀いお説明したす。

耇数の監芖察象むンスタンス

耇数の監芖察象むンスタンスが存圚する堎合の構成ずしお、監芖察象むンスタンス毎にリポゞトリDBを甚意しお各個にスナップショットを蓄積する構成ず、各監芖察象むンスタンスで共通のリポゞトリDBを甚意しおスナップショットを蓄積する構成がありたす。
ここでは、埌者の単䞀リポゞトリに耇数の監芖察象むンスタンスのスナップショットを蓄積する構成に぀いお説明したす。

蚭定手順

各監芖察象むンスタンスの蚭定ファむルに、同䞀のリポゞトリDBを参照する内容で「pg_statsinfo.repository_server」を蚭定したす。
以䞋に蚭定䟋を瀺したす。

pg_statsinfo.repository_server = 'host=192.168.0.32 port=5432 user=postgres dbname=postgres'

リポゞトリDBは各監芖察象むンスタンスから䞊蚘で蚭定したデヌタベヌスにパスワヌド入力なしに接続できる必芁がありたす。
各監芖察象むンスタンスからリポゞトリDBにパスワヌド入力なしに接続できるよう クラむアント認蚌 を蚭定しおください。

泚意事項

  • 耇数の監芖察象むンスタンスで自動メンテナンスのスナップショット削陀が蚭定されおいる堎合、監芖察象むンスタンスの䞭で最も期間の短いスナップショット保持期間が有効ずなりたす。

フォヌルバックモヌド

゚ヌゞェント起動時および蚭定リロヌド時にリポゞトリDBの正圓性チェックを行いたす。
正圓性チェックを実斜した結果、䞍備が怜出された堎合は䞀郚の機胜を無効化した状態で動䜜するモヌド(フォヌルバックモヌド)に移行したす。

リポゞトリDBの正圓性チェックの内容およびフォヌルバックモヌドで無効化される機胜を以䞋に瀺したす。

リポゞトリDBの正圓性チェックの内容

  • リポゞトリDBに接続できるか
  • リポゞトリDBに登録されおいる statsrepo スキヌマのバヌゞョンが正しいか

フォヌルバックモヌドで無効化される機胜

  • 統蚈情報の取埗機胜
  • サヌバログ蓄積機胜
  • アラヌト機胜
  • コマンドラむン機胜でのスナップショット取埗
  • 自動メンテナンス機胜でのスナップショット削陀

フォヌルバックモヌドから埩旧するず各皮機胜が再開されたす。
この際、フォヌルバックモヌドで動䜜しおいた期間のスナップショット取埗、アラヌト、自動メンテナンスは補完されたせん。
たた、サヌバログの蓄積はフォヌルバックモヌドに移行した時点のログから補完が行われたす。

埩旧手順

リポゞトリDBに接続できないこずが原因でフォヌルバックモヌドの移行した堎合は、リポゞトリDBを埩旧した時点で自動的に通垞モヌドに埩旧したす。
他の原因によりフォヌルバックモヌドに移行した堎合は、リポゞトリDBを埩旧した埌で蚭定リロヌドを実行しおください。

フォヌルバックモヌドに移行した原因はログ(テキストログ or syslog)に出力された内容から刀断できたす。
フォヌルバックモヌドに移行した時のログの出力䟋を以䞋に瀺したす。

# リポゞトリDBに接続できない
ERROR:  pg_statsinfo: could not connect to database with "host=192.168.0.1 user=postgres": timeout expired
LOG:  pg_statsinfo: pg_statsinfo is starting in fallback mode

# statsrepo スキヌマのバヌゞョンが合わない
ERROR:  pg_statsinfo: incompatible statsrepo schema: version mismatch
LOG:  pg_statsinfo: pg_statsinfo is starting in fallback mode

リポゞトリDBの埩旧に関する点怜事項ず察凊方法を以䞋に瀺したす。

  • リポゞトリDBに接続できない堎合
    statsrepo スキヌマのバヌゞョンが合わない堎合
    (正しいバヌゞョンの statsrepo スキヌマは蚭定リロヌド時に自動的に登録されたす)

内郚構成

pg_statsinfo はPostgreSQLのサヌバサむドで動䜜する pg_statsinfo ラむブラリず、゚ヌゞェントずしお動䜜する実行プログラムの2぀のモゞュヌルで構成されおいたす。 ラむブラリはロヌド盎埌に呌ばれるフック関数から゚ヌゞェントを起動するため、ナヌザが゚ヌゞェントを明瀺的に起動するこずはありたせん。

サヌバログ分配機胜内郚

ここでは、pg_statsinfoのサヌバログ分配機胜のログロヌテヌト時の動䜜を説明したす。拡匵子に「.copy」が付くファむルが出来るケヌス、拡匵子に「.err.n」が付くファむルが出来るケヌスを説明したす。

ログロヌテヌト発生時の挙動 (拡匵子「.copy」のファむルが䜜成されるケヌス)

保存甚テキストログ生成の際に、同名のファむルが存圚しお既に内容が曞かれおいる堎合、そのファむルの名前の拡匵子に「.copy」を付加したす。 これはコン゜ヌルログの内容の消倱を回避するための凊眮です。

拡匵子「.err.n」のファむルに぀いお

サヌバクラッシュたたぱヌゞェント停止コマンドによる停止埌に、゚ヌゞェントを再開するずこのファむルが生成されるこずがありたす。゚ヌゞェント再開時には、最埌に凊理しおいたCSVファむルが存圚しないず、察応する「.log」ファむルの拡匵子を「.err.n」にリネヌムしたす。 この堎合、゚ヌゞェント停止より埌の郚分のCSVファむルの内容は凊理されたせん。

たた、ベヌスバックアップからの起動の際にも「.err.n」ファむルが䜜成される堎合がありたす。これを防ぐためには、サヌバ起動前にDBクラスタディレクトリの䞭のpg_statsinfo.controlファむルを削陀しおください。

関連項目

倖郚サむト

PGcon 2010: pg_statsinfo

PostgreSQLドキュメント

pg_ctl, psql, サヌバの構成, 統蚈情報コレクタ, システムカタログ, pg_stat_statements, pg_stats_reporter


Top

Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION