0

Digital Ocean の 8GB RAM/4 CPU/80GB SSD クラウド サーバーで PostgreSQL をテストしています。私はもともと、postgresql.conf のデフォルト設定で PgBench を実行し、8 GB の RAM を反映するためにいくつかの一般的な設定 (shared_buffers、work_mem、maintenance_work_mem、effective_cache_size) を変更しました。2 番目のテスト セットを実行した後、一部の結果が実際には悪化していることに気付きました。なぜこれが考えられるのかについて何か提案はありますか? 私は PgBench と一般的な PostgreSQL のチューニングにはかなり慣れていません。

設定:

  • 共有バッファ = 2048MB
  • work_mem = 68MB
  • メンテナンス_作業_メモリ = 1024MB
  • effective_cache_size = 4096mb

テスト:

  • pgbench -i -s 100
  • pgbench -c 16 -j 2 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 2 -T 60 -U postgres postgres
  • pgbench -c 16 -j 4 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 4 -T 60 -U postgres postgres
  • pgbench -c 16 -j 8 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 8 -T 60 -U postgres postgres

これらのテストはどの程度効果がありますか? これは PgBench を使用する効果的な方法ですか? データとサーバー インスタンスを適切に反映するには、テストをどのようにカスタマイズすればよいですか?

4

1 に答える 1

6

「より悪い」とはどういう意味ですか? pgbench を実行する時間はどれくらいですか? このテストは、現実的な値を得るために最低でも約 2 時間実行する必要があります。使用している PostgreSQL のバージョンは何ですか?

注意: pgbench の結果の解釈には細心の注意を払う必要があります。おそらく、pgbench ではなく、アプリケーションの実行を最適化する必要があります。pgbench は、ハードウェアまたはソフトウェアのチェックには適していますが、PostgreSQL 構成の最適化には適していません。

言及された構成変数は構成の基本であり、おそらくそこで間違っていることはありません(サーバーはスワップを積極的に使用してはなりません-これらの変数はそれを保証します)。

私が使用する式:

-- 専用サーバー 8GB RAM
shared_buffers = 1/3 .. 1/4 専用 RAM
effective_cache_size = 2/3 専用 RAM

maintenance_work_mem > 最も大きなテーブルより高い (可能であれば)
                      それ以外の場合は 1/10 RAM
                      そうでなければ max_connection * 1/4 * work_mem

work_mem =貴重な設定は遅いクエリ分析に基づいています
            (初回設定約100MB)

-- 真でなければなりません
max_connection * work_mem * 2 + shared_buffers
          + 1GB (OS) + 1GB (ファイルシステムキャッシュ) <= RAM サイズ

通常、WAL バッファ サイズとチェックポイント セグメントのデフォルト値も低すぎます。そして、あなたはそれを増やすことができます。

于 2013-08-24T07:15:55.493 に答える