# 並列処理

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

---

LLMSインデックス: [llms.txt](/ja/llms.txt)

---

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

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

## `-j`で大きなファイルを分割する {#single-file-jobs}

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

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

```text
for each log file
    divide the file into N chunks
    find each chunk's start and end offsets
    fork N parsers at those offsets
    write one temporary binary statistics file per parser
wait for the workers
merge the binary files and build the report
```

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

## `-J`で多数のファイルを処理する {#multiple-file-jobs}

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

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

## アップストリームのベンチマーク {#benchmark}

アップストリームのマニュアルでは、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より先にストレージのスループットが制約になる場合があります。

## 制限と一時ファイル {#limits-and-temporary-files}

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

---

逆リンク:

- [pgBadger](/ja/docs/pgbadger/)
