PostgreSQL サーバーに適したパーティション

PostgreSQL サーバーに適したパーティション

私は 500GB の RAID 1 を使用して、Ubuntu 上に専用の postgresql サーバーをセットアップしています。私はこの分野にかなり不慣れなので、私が使用できるシンプルでありながら効果的なパーティション スキーマを誰かが共有してくれるかどうか知りたいです。

答え1

単一の大きな RAID でパーティション分割しても、パフォーマンス上のメリットはあまり得られません (ただし、/ がいっぱいになることによる大きな問題は回避できます)。

一般的には、自分でサイズを決めるのが本当に得意でない限り、OS のデフォルトを使用します。また、PGDATA ディレクトリを作成する予定の場所に十分な大きさの領域があることを確認してください。以下の OS パーティション分割の提案は、FreeBSD システムで私が使用しているものですが、Ubuntu でもおそらく問題ありません。

 /                    1GB (or larger)
 [SWAP]               2GB or 2*RAM Size
 /var                 10GB
 /usr                 10GB
 /usr/local           15GB
 /tmp                 2GB
 /home                10GB ("Big enough for home directories")
 -------------------------------------------------------------
 (OS Total)           50 GB
 [PGDATA]             Postgres data directory ("The rest")

(Ubuntu は /usr/local を使用しない場合があります。そうでない場合は、その一部を /usr に組み込むことができます)


Re: Postgres 固有のパーティション分割。単一の RAID-1 でこれを実行する場合は、[PGDATA] を DB とトランザクション ログを保持できる大きさにし、さらに拡張の余地も確保してください。

これが本番環境のボックスであり、大量の DB アクティビティが予想される場合は、これを多数の RAID-1 に分割してディスク アクティビティを分離します (非常に大容量の場合は、コントローラー間で分割することも検討してください)。

Oracle にはこれに関する素晴らしいホワイトペーパーが多数あります。その設計を盗用することを強くお勧めします。シンプルではありませんが、効果的です。私が使用しているパーティション スキーム (それぞれ独自のディスク ペア) は次のとおりです。

[PGDATA]               5-10GB
[PGDATA]/pg_xlog       5-10GB (More if you expect lots of transaction logs)
[PGDATA]/base          Big enough for your database
[PGDATA]/[Tablespace]  Optional - Separate out "high-traffic" table spaces
[PGDATA]/xlog_archive  Big enough for archived transaction logs & dumps

答え2

私は 1 秒あたり 600 ~ 1000 件のトランザクションという興味深いアクティビティを持つ PostgreSQL サーバーを所有しており、パーティショニングは次のようになります。

/      - 10GB
swap   - 15GB (I have 8GB RAM)
/var   - 20GB
/home  - 60GB (don't ask why, but I think 60gb is too much for home)
pgdata - 100 GB

あなたのデータによると、テーブルのパーティショニングに踏み込むと、小さなデータが必要な場合に巨大なテーブルをスキャンするのを避けることができます。たとえば、私はログを保存するためにパーティションテーブルを使用しているので、マスターテーブルはログ月間テーブルと呼ばれるYYYYMM_ログマスターから継承します。次に、トリガー関数を使用して、各ログを対応するパーティション テーブルに配置します。

関連情報