1

テーブルに 5 TB のデータを保存する予定です。以下は、テーブルを作成するために生成したデフォルトのスクリプトです。

CREATE TABLE measurements
(
 measurementtime              DATE NOT NULL,
 height number,
 offset number
)
PCTFREE    10
PCTUSED
INITRANS   1
MAXTRANS   255
TABLESPACE mytablespace
STORAGE   (
  INITIAL     262144
  NEXT
  PCTINCREASE
  MINEXTENTS  1
  MAXEXTENTS  2147483645
  FREELIST GROUPS  0
  FREELISTS  0
 )

パラメータを変更する必要があるかどうか教えてください。

4

1 に答える 1

5

システム全体を知らずに良いアドバイスをすることは難しい。以下のアイデアは、スクリプトと前の質問に基づいた推測です。非常に大きなデータを格納するテーブルを設計するにはどうすればよいですか。 しかし、あなたが読んだすべてを信じてはいけません。多くのテストを行う必要があります。このようなテーブルを最適化するために、何日も簡単に費やすことができます。

  1. PCTFREE 0:5 TBでインデックスがない場合は、更新を行わないと思います。それが当てはまる場合は、PCTFREEを0に変更して、スペースを10%節約できます。

  2. NOLOGGING:データをリカバリ可能にする必要がなく、データベースがアーカイブログモードの場合は、NOLOGGINGを追加することをお勧めします。APPENDインサートを使用したNOLOGGINGは、REDOを生成しません。(表領域がすでにNOLOGGINGに設定されている場合、これは不要な場合があります。)

  3. PARALLEL:このテーブルでは間違いなく並列処理を使用する必要があります。このテーブルはシステムでは珍しい可能性が高いため、ステートメントまたはセッションレベルで並列処理を定義することをお勧めします。ただし、このテーブルに対して実行されるすべてのステートメントを制御できない場合は、ステートメントが連続して実行されないように、ここで次数を定義することを検討してください。

  4. 不明なオプションを削除する:具体的に設定していない、または理解していないオプションをすべて削除する必要があると思います。TOADやDBMS_METADATAなどのツールを使用してスクリプトを生成した場合、それらは常にすべてのオプションを一覧表示しますが、通常はそのほとんどを省略して、Oracleに好きなものを使用させる必要があります。

  5. 圧縮/パーティション分割:Garyが述べたように、パーティション分割は非常に便利な場合があります。しかし、前の質問で、1日あたり最大200TBとわずか5TBを保存するとおっしゃいました。あなたは貧乏人の仕切りを使っていますか?毎日テーブルの名前を変更して再作成しますか?これが1日分のデータである場合、圧縮は測定時間に非常に役立ちます。

  6. ブロックサイズ:「mytablespace」の設定はわかりませんが、何も言わなかったので、標準のブロックサイズを使用していると思います。このテーブルには大きなブロックサイズを使用する価値があるかもしれません。そうすれば、さらに優れた圧縮を実現できます(ブロックごとに圧縮が行われるため、ブロック内のデータが多いほど、Oracleはより多くのデータを圧縮できます)。私はこれを提案するのは気が進まない。なぜなら、人々がブロックサイズを変更するときの99%は、彼らが思っていることをしないからだ。しかし、このように大量のデータがある場合は、検討する価値があるかもしれません。

于 2011-03-24T03:40:45.957 に答える