web-dev-qa-db-ja.com

PostgreSQLの高性能セットアップ

私は次の仕様でサーバーをセットアップしています:
*数量4プロセッサー(各12コアのAMD Opterons)
* 32GBメモリ
*数量8HDD(15K SASデュアルポート)
* CentOS 5.5
* JBoss
* PostgreSQL

後でアプリケーションをデータベースから分離する可能性がありますが、今のところ、それらは同じマシン上にあります。 PostgreSQLのパフォーマンスには次の利点があることを読みました。
* RAID 10
*個別のOSパーティション
*個別のxlogパーティション
*個別のpgdataパーティション

私の単一のRAID10ボリュームには合計559808MBが使用可能であるように思われるため、これが現在のパーティション計画です。
* OSの場合は337856MB
* pgdataの場合は102400MB
* xlogの場合は51200MB
*スワップ用68352MB

ここにいくつかの質問があります:
*私のパーティションプランはどのように見えますか?
* CentOSをインストールするときに、ディスクのセットアップ手順に進むときに、マウントポイントを定義する必要があります-pgdataパーティションに何を入力する必要がありますか? (例:ref この例のセットアップマウントポイント/ pgdata1
* xlogパーティションのマウントポイントとして何を入力する必要がありますか?
*ファイルシステムタイプの場合、完全なパフォーマンスよりも破損の回避が重要であるため、計画では「noatime」を使用し、パーティションマウントオプションには「data = ordered」を残します-どう思いますか?
*その他の考慮事項はありますか?

注:pgdataパーティション内のすべてのデータベースの合計サイズは、今後数年間で20GBを超えることはない可能性があります。

5
user75452
  • わかりました、現実になりましょう。使用中のデータベースとアプリサーバーは実際には交換しないでください。今、私は「カーネルの一部などのように使用されていないものをスワップアウトする」ことを理解していますが、64GBのスワップスペースはばかげています。コンピュータがそれをまともな速度で賢明な方法で利用できる方法はありません。時間がかかりすぎます。それを削減します。重要です。非常に重要です。 8GBかそこらが好きです。たぶん12または16です。しかし、現在割り当てている64GBをリモートで利用する方法すらありません。

  • あなたのサーバーは、哀れではありませんが、高性能のデータベースサーバーではないので、計算に関して多くのことを行うことができれば幸いです。悪いニュース。本当に悪いニュース。共有されているすべてのものに対して1回のレイド10-良い考えではありません。しかし、6枚のディスクは15kの高性能ではありません。ここには、データ専用のRAID10に6枚のディスクがある小さなデータベースサーバーがあります。トランザクションに関しては、OLAPを実行しない限り、ディスクのパフォーマンスによって再び制限されます。ディスクサブシステムがONE12コアプロセッサーをプッシュできる方法はありません。そのうちの4つは絶対に不可能です。ほとんどの場合、単一の4コアがディスクに過負荷をかけます。本当に、計算側で何かをしたほうがいいです。

提案:

  • ログ用に別のSSDを追加します。これは超高速で、応答時間が非常に高速です。データベースは変更をできるだけ早くディスクに書き留める必要があり、それは場合によっては「書き留められてフラッシュされる」。
  • あなたが買うものが必要であることを確認してください。 Javaはリソースを大量に消費する可能性があることは知っていますが、これらの次元では、本当に48コアが必要ですか?Centosはそれを適切に処理しますか?Linux DIDコアが多すぎます。今では、これらの時代はほとんど終わっていますが、48コアはかなりプッシュできます。私は強力なサーバーが本当に好きですが、通常データベースを操作する場合、そのサイズは4桁のアップウォー(1000 + GB)であり、ディスクサブシステムそのモンスターにIO必要な予算を供給するために、最低10枚、多くの場合1000枚以上のディスクがあります。ORサーバーは仮想化用です。

  • おそらくRAMを追加します。 32GBのサウンドは印象的ですが、48コアの場合、私の好みでは少し低めです。私はコアあたり最低1〜2ギガバイトで行くことを好みます。

  • AMDに行く場合は、モジュールをプロセッサ間で分割することを忘れないでください;)
6
TomTom
  • ++ TomTomが書いたこと。
  • IIRC data/xlog/OSの個別のパーティションの理由は、それらを個別のスピンドルセットに配置するためです。同じRAIDセットにすべてをドロップすることでそれがどのように達成されるかわかりません。
  • PostgreSQLは複数のコアにかなりうまく拡張できますが、48はやり過ぎのようです。
  • コアの速度もあります。私が見たところ、コア数が多いほど、個々のコアの速度は遅くなります。コアの数は少なくても高速です。

高性能PostgreSQLの詳細をカバーするかなり良い仕事をしている本PostgreSQL 9.0 High Performanceがあります。

2
gsiems

単一の大きなRAID10ボリュームを複数のパーティションに分割しても、何の役にも立ちません。 OS、WAL、およびデータベースドライブのディスク使用パターンは十分に異なるため、それらを別々のディスクに配置すると、PostgreSQLが高速になります。たとえば、WALはすべてシーケンシャル書き込みであるため、そのための専用ドライブがあると、さまざまなことに役立ちます。同じ大きなドライブボリューム上の個別のパーティションは、同じようにパフォーマンスを向上させるわけではありません。

ただし、サーバー上のRAM)の量に比べてデータセットが非常に小さい場合は、最終的にはそれほど重要ではありません。実際には、高性能のディスクセットアップはまったく必要ありません。つまり、高速のCPUとRAMだけです。

あなたが言及しなかったことの1つは、使用しているRAIDコントローラーと、キャッシュにバックアップを提供するためのバッテリーがあるかどうかです。これは、パーティショニングの雑学よりもはるかに重要です。その他の背景へのリンクについては、 Reliable Writes を参照してください。

2
Greg Smith

データベースは通常、I/Oバウンドです。あなたの特定のアプリケーションについて何も知らずに、私はプロセッサを3つ落とし、pgdataパーティション用のFusion IOカード(またはSSD)を入手することを検討します。

また、RAIDの設定も少し異なります。 xlog(シーケンシャル)の使用パターンは、通常、pgdata(ランダム)パーティションとは異なります。このため、別々の物理デバイスに配置することをお勧めします。

0
toppledwagon

標準的なパフォーマンスの答えは「テストして見る」です。したがって、負荷がかかった状態でいくつかの異なる構成を試して、どれが最適かを確認できる場合データを使用した負荷に対してこれは「正しい」構成になります。

20GBのデータベースを使用すると、(ほぼ)すべてのDBをファイルシステムキャッシュやPostgresqlバッファキャッシュに収めることができます。サーバーがウォームアップされると、それほど多くの物理IOがない場合もあります。

おそらく、開始するのに適した場所は、OS用に2ディスクRAID 1ミラーを作成し、pgdata +スワップ用にRAID10アレイ内の他の6つのディスクを使用することです。バックアップするデータが得られるまで、xlogとpgdataを分離する必要はないと思います。この設定により、本当に必要な場合は、少なくともログをミラードライブに移動できます。

マウントオプションについても同じことが言えます。 noatimeはほとんどの場合良い考えですが、それ以外は必要になるまで放っておいてください。

CentOS/RHELで注意すべきことの1つは、LVMです。これはおそらく別の質問に値しますが、私はLVMを使用せず、代わりにプレーンなext3パーティションを作成します。 (LVM RAIDではなく、ディスク用のハードウェアRAIDを意味していることを心から願っています)

0
AngerClown