2011-03-24 83 views
1

我打算将5 TB数据存储在表中。以下是我为创建表格而创建的默认脚本:在oracle中为一个非常大的表创建表语句

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 
) 

您能否告诉我是否需要修改任何参数?

+2

在5TB,你可能想看看有一个主键或某些索引:-) – paxdiablo 2011-03-24 00:50:56

+2

你可能想要分区或压缩。取决于Oracle版本以及您实际打算如何处理数据。 – 2011-03-24 01:29:22

回答

5

如果不知道整个系统,很难给出好的建议。下面的想法是基于你的脚本和你以前的问题的猜测How do I design a table which will store very large data?但是不要相信你读的所有东西。你需要做很多测试。您可以轻松地花费很多天试图优化这样的表格。

  1. PCTFREE 0:如果你有5 TB,没有索引我 假设你不会做任何 更新。如果是这样,您可以将 更改为0,并节省10%的 您的空间。

  2. NOLOGGING:如果你不需要你的数据是 可恢复的,如果你的数据库在ARCHIVELOG模式 ,那么你可能 要添加NOLOGGING。 NOLOGGING 与APPEND插入不会产生 重做。 (这可能是不必要的 如果你的表是 已经被设置为NOLOGGING。)

  3. 并行:你一定会想用 并行与此表。由于 此表很可能与您的系统的 不同,因此 可能会更好地定义 或会话级别的并行性。但是,如果你不会 拥有控制权的所有 声明反对此表 运行,你可能要考虑在这里definining 程度,以确保 语句不连续运行。

  4. 删除未知选项:我认为你应该删除所有 选项,你没有专门设置 或者不明白。如果您 使用像蟾蜍或 DBMS_METADATA工具来生成脚本 他们总是会列出所有选项, 但通常你应该把大部分的 那东西出来,让甲骨文使用 为所欲为。

  5. 压缩/分区:像Gary提到的那样,分区 可能非常有用。但在您的 上一个问题中,您提到 每天最多可存储200TB并且只有5TB 。你是否在使用穷人的 分区;重新命名和 每天重新创建表?如果 这只是一天的数据价值 那么压缩应该是非常有用的测量时间 。

  6. 块大小:我不知道什么样的 “mytablespace”的设置,但因为你 没有再提我 猜你正在使用标准 块大小。它可能使用大的块尺寸为这个 表值得 这样你就可以得到更好的 压缩(压缩既然是 每块完成,在 块的数据越多越甲骨文可以压缩)。 我不愿意建议这个, ,因为99%的时间,人们 改变块大小,它不会做 他们认为应该。但有了 这么大的数据量,它可能是值得考虑的 。

相关问题