PostgreSQLでの挿入パフォーマンスに最適なファイルシステムは何ですか?


20

そこにいる誰かが、ファイルシステムとデータベースのパフォーマンスを実験または比較したことがあれば、私は興味があります。Linuxでは、postgresデータベースに最適なファイルシステムは何だと思います。また、どの設定(inodeなど)が理想的ですか?これは、データベース内のデータに基づいて大幅に異なる可能性がありますか?

一般的なファイルシステム/データベースのパフォーマンスに関連する質問を探している場合、この投稿には良い情報があります。

ただし、読み取りパフォーマンスではなく、挿入パフォーマンスに関するアドバイスをできるだけ多く取得したいと思います。すばらしい回答をありがとうございました!


7
最良のファイルシステムはより多くのメモリでしょうか?;)
Oskar Duveborn 09年

2
オスカーの+1。RAMがDBの合計サイズの〜33%であるサーバー構成から、合計RAMがDBのサイズよりも大きい新しいマシンに移行しました。これで、DB全体をメモリにキャッシュできます。最も遅いSQLクエリは2桁速くなりました。
ケビンレイ2009

回答:


14

Greg Smithによる「postgresql high performance」のコピーを購入します。それは素晴らしい本であり、2つ以上の章はディスクハードウェアとファイルシステムについてです。あなたは多くを学びます。

つまり、簡単な答えはありません。

しかし、私はサマライズしようとします:

  • 何をしているのかがわかるまでext2を使用しないでください。
  • ext3では、fsync呼び出しによるチェックポイントの急上昇に注意してください。113および82および79ページを参照してください
  • ext4またはxfsを使用します
  • 他のオプションがあります

しかし、実際にどのFSを使用するかを自問しているので、この本を読むべきです!


4
同意しました、これはグレッグが非常によく扱っている種類のトピックです。本を借りたり購入したりする前に評価したい場合は、packtpub.com / sites / default / files / ...にサンプルの章があります。
sciurus

1
おかしい、私がこの問題を抱えていたとき、本は存在しませんでした。今、私はグレッグがその本に費やした努力に本当に感謝しています。
エリヤ

私はこの偉大な作品を称えるために別のコピーを買った:-)
Janning

6

まず第一に、信頼性の高いファイルシステムが最初に必要であり、高速の1秒が必要です。これはいくつかのオプションを除外しています...

パフォーマンステストは、多くの場合、XFSが最高のパフォーマンスを提供することを示しています。ディスクが非常に近い状態に達すると、安定性の問題が発生しますが、それが発生しないことを監視する限り、パフォーマンスはわずかに向上します。

理論的には、pg_xlogディレクトリにジャーナリングファイルシステムは必要ありませんが、速度の違いは通常非常に小さいため、それだけの価値はありません。データディレクトリには、常にメタデータジャーナリングファイルシステムが必要です。


4
XFSを使用して/ not /を使用してデータベースを保存したい場合があります。これは、(必要な場合に)回復できないブロックをゼロアウトするためです。
エイブリーペイン

4

データベース管理システムは、データベースログを通じて独自のジャーナリングを実装するため、ジャーナリングされたファイルシステムにそのようなDBMSをインストールすると、2つのメカニズムによりパフォーマンスが低下します。

  1. 冗長ジャーナリングにより、ディスクアクティビティの量が増加します

  2. 物理ディスクレイアウトは断片化できます(ただし、一部のジャーナリングファイルシステムにはこれをクリーンアップするメカニズムがあります)。

  3. 大量のディスクアクティビティによりジャーナルがいっぱいになり、偽の「ディスクフル」状態が発生する可能性があります。

数年前に、HP / UXボックス上のBaanインストールのLFSファイルシステムでこれが行われたインスタンスを見てきました。システムには永続的なパフォーマンスとデータ破損の問題があり、ファイルシステムがLFSでフォーマットされていると誰かが判断するまで診断されませんでした。

データベースファイルを保持するボリュームには、通常、少数の大きなファイルがあります。通常、DBMSサーバーには、1つのI / Oで読み取るブロック数を構成する設定があります。冗長なデータのキャッシュを最小限に抑えるため、大容量のトランザクション処理システムには小さい数値が適しています。データウェアハウスなど、大量の連続読み取りを行うシステムには、より大きな数値が適しています。可能であれば、ファイルシステムの割り当てブロックサイズを、DBMSが設定されているマルチブロック読み取りと同じサイズに調整します。

一部のデータベース管理システムは、未加工のディスクパーティションを処理できます。これにより、さまざまな程度のパフォーマンスの向上が得られますが、通常、大量のメモリを搭載した最新のシステムではそれほど向上しません。ファイルシステムメタデータをキャッシュするスペースが少ない古いシステムでは、ディスクI / Oの節約が非常に重要でした。rawパーティションはシステムの管理を難しくしますが、利用可能な最高のパフォーマンスを提供します。

RAID-5ボリュームは、RAID-10ボリュームよりも書き込みオーバーヘッドが大きくなるため、書き込みトラフィックの多いビジーなデータベースのパフォーマンスは、RAID-10のほうが優れています(多くの場合、はるかに優れています)。ログは、物理的に別個のディスクボリュームをデータに配置する必要があります。データベースが大きく、ほとんどが読み取り専用の場合(データウェアハウスなど)、ロードプロセスが過度に遅くならない場合、RAID-5ボリュームに配置することがあります。

コントローラーのライトバックキャッシュは、データが破損する可能性のあるいくつかの(合理的ではないが可能性のある)障害モードを作成することを犠牲にして、パフォーマンスを向上させることができます。これに対する最大のパフォーマンスの向上は、非常にランダムなアクセスロードです。これを行う場合は、ログを別のコントローラーに配置し、ログボリュームのライトバックキャッシュを無効にすることを検討してください。これにより、ログのデータの整合性が向上し、1つの障害でログとデータボリュームの両方を取り出すことができなくなります。これにより、バックアップから復元し、ログからロールフォワードできます。


ジャーナリングデータはパフォーマンスを低下させます。ジャーナリングメタデータは、最悪の場合でも最小限の影響しか与えず、ほとんどの場合、ほとんど影響を与えません。ジャーナリングのメタデータはお勧めできません。
niXar 09年

あなたは記事を誤解したと思います。すべてのファイルシステムにはファイルシステムのメタデータがあり、ディスクトラフィックには読み取りまたは書き込みが含まれます。最近のコンピューターには通常、このファイルシステムメタデータを簡単にキャッシュするのに十分なRAMがありますが、古いコンピューターにはありませんでした。これは、ファイルシステムのメタデータを読み取りまたは更新するために、ディスクアクセスがかなりの追加のI / Oオーバーヘッド(Oracleの引用された数字はrawパーティションの30%のパフォーマンスヒットであった)を被ることを意味しました。より多くのRAMを搭載した最新のシステムでは、ファイルシステムメタデータがキャッシュされる可能性が高いため、オーバーヘッドが低くなります。
ConcernedOfTunbridgeWells

これにはいくつかの適切な一般的なアドバイスが含まれていますが、postgresqlおよび最新のジャーナル化されたファイルシステムにとっては無関係または不適切な情報も含まれているため、私は投票しました。
sciurus

3

私はそのような詳細なレポートをしましたが、それはフランス語のみです。フランス語を読んだり、自動翻訳ツールに満足している場合...方法論を再利用して自分で実行できます。

エグゼクティブサマリー:pgbenchを使用しました。Linux I / Oスケジューラーは、パフォーマンスとファイルシステムの重要性がほとんどありません。そのため、急いでいる場合は、デフォルトを選択してください。JFSを選択しました。


2

ファイルシステムは問題の一部にすぎません。IOスケジューラーを変更することにより、パフォーマンスを大幅に向上させることができます。幸いなことに、これはIOスケジューラーをその場で変更できるため、テストは非常に簡単です。典型的な負荷の下で数日間それぞれを試してみて、どれが最高のパフォーマンスを発揮するかを確認することをお勧めします。


おそらくすべてのDBMSが独自のスケジューラをすでに持っているため、私のベンチマークではI / Oスケジューラを変更してもほとんど変化がありませんでした。
ボルツマイヤー09年

MySQLは、デッドラインスケジューラーを使用することにより、高負荷下での処理を大幅に改善します。
デビッドパシュリー

2

数か月前にいくつかのテストを行いました。

50個のスレッドを作成する小さなテストプログラムがあり、すべてのスレッドが同じテーブルに1000(または10000)行を挿入しました。

  • EXT3上のデータベースと4ディスクRAID5では、50秒かかりました。
  • ramdisk上のテーブル(テーブルスペースを使用)では、まだ50秒かかりました。速くなかった理由は、すべてが同じRAID 5にあるpg_xlogディレクトリに記録されるためです。
  • pg_xlogを4ディスクRAID0(ストライプ)に移動し、同じプログラムを40秒で実行しました。
  • テストのために、pg_xlogをramdiskに移動し、その他すべてをEXT3 4ディスクRAIDに配置しました。プログラムは5秒未満で終了しました。

しかし、ソフトウェアramdiskにpg___xlogを持つことはオプションではありません。pg_xlogディレクトリの内容を失うと、postgresは起動しません。(ただし、バッテリバックアップを備えたハードウェアRAMディスクが存在する可能性があります。)

私見:データベースファイルには、最も使いやすいファイルシステムを使用してください。pg_xlog(シンボリックリンク付き、ドキュメントを参照)を最速のデバイスに移動します。


1
pgbenchは同様のことを行い、ほとんどのインストールに含まれています。
エイブリーペイン

0

FreeBSDを微調整すると、他のOSとは対照的に、もう少しパフォーマンスが向上することを思い出したようです。この情報は時代遅れであり、おそらく最初の神話であると確信していますが。ただし、それでも試してみることができます。カーネル設定については、次のガイドラインを参照してください:http : //developer.postgresql.org/pgdocs/postgres/kernel-resources.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.