3

私は3つのデータベーステーブルを持っており、それぞれに600万行が含まれ、毎年300万行が追加されています。

表の情報は次のとおりです。表1:各フィールドで平均50文字の20フィールド。両方ともタイムスタンプフィールドにある2つのインデックスがあります。表2:5つのフィールド、2バイトの配列フィールドと1つのxmlフィールド表3:4つのフィールド、1バイトの配列フィールド

使用法は次のとおりです。各テーブルに1秒あたり15〜20レコードを挿入します。ビューは最初の2つのテーブルを結合することによって作成され、選択は主に最初のテーブルの日付フィールドに基づいています。

現在、3つのテーブルすべてにそれぞれ1つのレコードを挿入すると、約100ミリ秒かかります。

postgres8.4から9.2に移行する予定です。挿入のパフォーマンスも最適化したいと思います。また、履歴テーブルを作成し、古いレコードをそれらのテーブルに保持することを計画しています。この点に関して私は次の質問があります

  1. 履歴テーブルを作成し、古いデータをそれらのテーブルに移動すると、挿入パフォーマンスの向上に役立ちますか?
  2. それが役に立ったら、毎日どのくらいの頻度で古いレコードを履歴テーブルに移動する必要がありますか?または毎週/毎月/毎年?
  3. 1年のデータ(300万)ではなく1か月(220,000)のデータのみを保持する場合、挿入パフォーマンスの向上に役立ちますか?

よろしくお願いします、Sudheer

4

1 に答える 1

1

私が現れてより良い答えを提供するよりも、誰かがよりよく知っていると確信していますが、私の印象は次のとおりです。

  • 挿入のパフォーマンスは、主にインデックス戦略とハードウェアの関数です
  • 一般に、パフォーマンスは 8.4 よりも 9.0 以降の方が優れており、これが挿入パフォーマンスに影響を与える可能性がありますが、それについては確信が持てません。
  • あなたのアイデアがインサートのパフォーマンスに直接影響することはありません

とはいえ、小さなインデックスを維持するコストは大きなインデックスよりも低いため、履歴テーブルを作成してそこに古いデータを移動すると、インデックスのプレッシャーが軽減されるだけでパフォーマンスが向上する可能性があります。しかし、インデックスの 1 つを削除すると、直接的かつ大きな効果が得られると思います。おそらく、両方のインデックスを持つ履歴テーブルを作成し、そのうちの 1 つを「今日」のテーブルに維持することはできますか?

私があなたの立場なら、私のマシンで 8.4 を実行し、同様の構成で稼働中の製品のコピーを取得します。次に、9.2 にアップグレードして、挿入のパフォーマンスが変化するかどうかを確認します。次に、これらのアイデアを試してベンチマークし、どのアイデアが状況を改善するかを確認します。有用な情報を得るためには、可能な限り実稼働に近い状態を維持することが絶対に不可欠ですが、得られる仮説的な回答よりも優れた情報であることは間違いありません。

現在、1 行の IMO を挿入するのに 100 ミリ秒はかなり遅いようです。ハードウェアが改善されれば、この状況は確実に改善されるでしょう。通常の提案は、バッテリーでバックアップされたキャッシュを備えた大きなストライプ RAID アレイです。PostgreSQL 9.0 High Performanceには、これらすべてに関する詳細情報があります。

于 2013-03-04T21:32:21.457 に答える