2010-11-29 47 views
5

コンテキスト:Oracle 10データベース。このような状況でパーティションを使用するのは良い考えですか?

かなり大きなテーブル(数百万レコード)では、最近いくつかのパフォーマンスの問題が発生し始めました。テーブルにはいくつかの特殊な動作/条件があります。

  • そのほとんどが一回書き込み、レコードが0..N(その列クラスを呼び出すことができます)から分類されている最初の日かそこら中に再度
  • 変更されることは決してありません。その最初の日にレコードが数回再分類される可能性があります。
  • 新しいエントリはクラス0で「未分類」を意味します。
  • 1時間ごとにプロセスが新しいreocrdを分類し、1..N
  • すべての読者がクラス1
  • にのみ関心がある日より古いすべてのレコードはほとんど、自分のクラスを変更しない> 1で最もアクセスが行われているように、今、数日後に

をクリーンアップなっていますクラス1には、その列はしばしばクエリ(クラス= 1)に含まれ、他のcondit ons。クラス列にはインデックスがあり、他の列にはインデックスがあります。

私の質問に:私たちは今、クラスごとにテーブルを分割することを考えています。私が理解している限り、クラス= 1は残りのデータと既に分離されているため、データへのアクセスは暗黙的により効率的であるため、これによりデータの索引付け/作業が高速になります。これは正しいです?

これが良いアイデアであることに同意するならば、私はそのトピックをさらに読むでしょう!

おかげ 乾杯

を更新2010年11月30日

を入力いただき、誠にありがとうございます。私はその余分なオプションを知っていなかった:)それを指摘してくれてありがとう(私はそれにあまりにも多くの時間を投資する前に)。しかし、ライセンスの問題のほかに、パーティションは必ずしもこのような状況では良い解決策ではないように思われます。

答えて

4

どのような操作が遅くなり、その操作が遅いのがわかりましたか?

クラスごとにパーティション化すると、行のクラスを更新する処理が遅くなります。これにより行が1つのパーティションから別のパーティションに移動するようになるので、更新を最初のパーティションから削除し、2番目のパーティションに挿入することになります。すべての新しいレコードを見つけるのに時間がかかるため、時間単位の処理が遅く、処理が遅い場合は、ここでのパフォーマンスのトレードオフがかなり合理的な場合があります。一方、新しいクラスの計算に時間がかかり、すべての行を更新するために時間単位のプロセスが遅い場合、そのトレードオフはおそらく非常に貧弱な考えです。

エンタープライズエディションライセンスの上にパーティショニングを追加するオプションがあるので、私は、機能ベースのインデックスを使用して、ほとんどコストをかけずにパフォーマンスを向上させることができます。たとえば、あなたが望む

CREATE VIEW vw_new_entries 
AS 
SELECT (CASE WHEN class = 0 THEN primary_key ELSE null END) primary_key, 
     <<list of columns>> 
    FROM your_table 
WHERE class = 0 

CREATE VIEW vw_class1_entries 
AS 
SELECT (CASE WHEN class = 1 THEN primary_key ELSE null END) primary_key, 
     <<list of columns>> 
    FROM your_table 
WHERE class = 1 

のカップルと一緒に

CREATE INDEX idx_new_entries 
    ON your_table((CASE WHEN class = 0 THEN primary_key ELSE null END)); 

CREATE INDEX idx_class1_entries 
    ON your_table((CASE WHEN class = 1 THEN primary_key ELSE null END)); 

2ファンクション索引を持っていた、場合、PRIMARY_KEYで濾過新しいビューに対する任意のクエリは、関数ベースを使用します索引は、基礎となる表の適切な行のみを索引付けします。これにより、パーティション化に頼ることなくルックアップのパフォーマンスを向上させることができます。

-1

Yeppは良いアイデアのようです。

これに代わるものがありますが、簡単な修正はパーティションです。

+1

パーティショニング(少なくともOracleの場合)は、高価なオプションであり、決してすべての状況で適切ではありません。 – APC

3

テーブルのサイズはどれくらいですか?成長率とは何ですか?データをパージしていますか、データをパージする予定ですか?今、どのインデックスがテーブルにありますか?サンプルテーブルの定義を教えてください。パーティショニングは追加のライセンスオプションです。誰かが実際にそれを支払うことを確認しましたか?

、最も重要なのは、サンプルは、あなたが提供している何

照会記入してくださいは、上の意思決定をベースに十分な情報ではありません。

関連する問題