web-dev-qa-db-ja.com

PostgreSQLはパフォーマンスSSDを最大化

テーブルごとに1億以上のエントリを持つ多くのテーブルを持つ巨大なPostgreSQL 9.3データベースを用意します。このデータベースは基本的に読み取り専用になります(必要なすべてのテーブルに入力してインデックスを作成し、DBで書き込み操作を行わないようにします)。DBが使用されるため、シングルユーザーアクセス(ローカルホストから複数のクエリを実行およびベンチマーク)します。研究目的のみ。クエリは常に整数DBフィールドでJOINを使用します。

この目的のために、おそらくSSD(256-512GB)を購入するでしょう。以前にDBにSSDを使用したことがないので、心配する必要があることはありますか? SSD全体にDB全体、またはインデックスのみを配置できますか? SSD用にPostgreSQLを調整するために必要な特別なアドバイス/チュートリアルはありますか?私はi7と32GbのRAMを備えた良いワークステーションを持っていることに注意してください。おそらくそこでもいくつかのアドバイスを提供できます。

21
Alexandros

だから私が恐れるべきことはありますか?

バックアップがありません。他のストレージデバイスと同様に、それは死ぬ可能性があります。バックアップを保持します。

データのロードに時間がかかる場合は、データのロードが完了したら、読み取り専用のデータベースを停止してコピーすることでバックアップします。そうすれば、何か問題が発生した場合でも、後で再作成する方が簡単です。

SSD全体にDB全体、またはインデックスのみを配置できますか?

収まる場合は、DB全体を保存します。

そうでない場合は、SSDにテーブルスペースを配置し、それを使用してインデックスと、頻繁にクエリされるテーブルをできるだけ多く格納します。

SSD用にPostgreSQLを調整するために必要な特別なアドバイス/チュートリアルはありますか?

SSDの利点のほとんどは、OLTP書き込みロードです。読み取り専用ロードの主な利点は高速シークであり、スラディエールはそれをカバーしています。

effective_io_concurrency = 5またはSSDは高速で大量のパイプライン化されたランダム読み取りを実行できるという事実を反映するものです...しかし、これはビットマップインデックススキャンにのみ影響し、実際にはrandom_page_costはすでにそれを組み込んでいます。

読み取り専用のロードの場合は、それほど大きな違いはありません。

初期データロードについては、以下を参照してください。

私はi7と32GbのRAMを備えた優れたワークステーションを持っていることに注意してください。おそらくそこでもいくつかのアドバイスを提供できます。

大きなmaintenance_work_memデータロード用。少なくとも8GB

大きなwork_memクエリ作業用。適切なサイズは、クエリの複雑さに多少依存します。皮切りに 500MBそこから上ります。

checkpoint_segments(大規模に)初期データ読み込み。

VM overcommit!(PostgreSQLマニュアルを参照: http://www.postgresql.org/docs/current/static/kernel-resources.html )を無効にしてください)

16
Craig Ringer

SSDについての主なアドバイスは、他の通常の設定に加えて、postgresql.confで「random_page_cost」を1(「seq_page_cost」に等しい)に下げることです。

22
slardiere