本文へ移動

並列処理

単一ログを分割する並列処理と、複数ログを単位とする並列処理を使い分けます

pgBadgerには相互に補完する2つのマルチプロセスモードがあります。単にCPU数だけでなく、入力の構成に応じて選択してください。

オプション 並列処理の単位 適する入力 主な制約
-j N / --jobs N 単一ログファイルの分割片 大きなシーク可能なログ1つ 分割境界で少数のクエリーが重複または欠落する場合があります
-J N / --Jobs N ログファイル全体 多数の独立したログ ワーカーを稼働させ続けるだけのファイル数がある場合にのみ効果があります

-jで大きなファイルを分割する

$ pgbadger -j 8 /var/log/postgresql/postgresql.log

アップストリームのアルゴリズムは、各ファイルをN個のバイト範囲に分割し、範囲ごとにパーサーをフォークして一時的なバイナリ統計を書き出した後、その統計を最終レポートに統合します。

ログファイルごとに
    ファイルをN個の範囲に分割する
    各範囲の開始・終了オフセットを求める
    それらのオフセットでN個のパーサーをフォークする
    パーサーごとに一時バイナリ統計ファイルを書き出す
ワーカーの終了を待つ
バイナリファイルを統合し、レポートを生成する

ログレコードや複数行のステートメントはバイトオフセットと完全には一致しないため、分割境界では、ファイルごとに最大でおよそN個のクエリーが途中で切れたり、欠落したり、より一般的には二重に数えられたりする場合があります。このモードは非常に大きなファイルの集計分析に使用し、すべてのレコードを厳密に数える必要がある調査には使用しないでください。

-Jで多数のファイルを処理する

$ pgbadger -J 8 /var/log/postgresql/postgresql-*.log

各ワーカーがファイル全体を担当するため、このモードでは分割境界での欠落を回避できます。数百の小さなファイルと十分なCPU・I/O能力がある場合に特に有効です。アップストリームのドキュメントでは、独立した圧縮ファイルに対しても-Jを使用できます。-jによる単一ファイルの分割には、シーク可能な非圧縮入力が必要です。

アップストリームのベンチマーク

アップストリームのマニュアルでは、8 CPUのホストで測定した次の結果が報告されています。現在のハードウェアの性能予測ではなく、2つのアルゴリズムの比較として参照してください。

9.5 GBのファイル1つ:

オプション 1 CPU 2 CPU 4 CPU 8 CPU
-j 1h41m18 50m25 25m39 15m58
-J 1h41m18 54m28 41m16 34m45

10 MBのファイル200個、合計2 GB:

オプション 1 CPU 2 CPU 4 CPU 8 CPU
-j 20m15 9m56 5m20 4m20
-J 20m15 9m49 5m00 2m40

実用上の基本は、少数の大きなファイルには-j、多数の小さなファイルには-Jです。入力とプラットフォームが対応していれば両モードを組み合わせられますが、その組み合わせでベンチマークを実施してください。ログ解析は、CPUより先にストレージのスループットが制約になる場合があります。

制限と一時ファイル

  • -jは圧縮入力やCSV入力には使用できません。また、プロセスのフォークに依存するため、Windows向けのモードではありません。
  • アップストリームのリモート入力機能では、リモートCSVの解析はサポートされていません。
  • 並列解析では、選択した一時ディレクトリ(デフォルトではシステムの一時ディレクトリ)にtmp_pgbadgerXXXX.binのような名前の一時ファイルを作成します。
  • pgBadgerの実行中はこれらのファイルを削除しないでください。--tempdirを使用して、十分な容量のあるストレージに配置します。
  • 最初は控えめなワーカー数で開始し、CPU、読み取りスループット、一時領域の使用量、経過時間を監視してください。