在oracle中为一个非常大的表创建表语句

时间:2011-03-24 00:47:58

标签: oracle large-data

我计划将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
 )

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

1 个答案:

答案 0 :(得分:5)

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

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

  2. NOLOGGING:如果您不需要数据 可恢复的,如果您的数据库是 在存档日志模式中,您可以 想要添加NOLOGGING。 NOLOGGING 使用APPEND插入不会 生成重做。 (这可能是 如果你的表空间是不必要的 已经设置为NOLOGGING。)

  3. PARALLEL:你肯定想要使用 与此表并行。以来 这张桌子很不寻常 你的系统,它可能更好 在声明中定义并行性 或会话级别。但如果你不愿意 控制所有的 语句针对此表运行 你可能想要考虑定义 这里的程度,以确保 语句不能串行运行。

  4. 删除未知选项:我认为你应该删除所有的 您没有具体的选项 设置,或不明白。如果你 使用像TOAD或 DBMS_METADATA生成脚本 他们将始终列出每个选项, 但通常你应该离开大部分 这东西让Oracle使用 无论喜欢什么。

  5. 压缩/分区:就像Gary提到的那样,分区 可能非常有用。但在你的 您提到的上一个问题 存储容量高达200TB,仅为5TB 每天。你在用穷人吗? 分区;重新命名和 每天重新制作桌子?如果 这只是一天的数据 然后压缩应该是非常的 有助于测量时间。

  6. 块大小:我不确定是什么设置 “mytablespace”是,但自从你 我没有提到任何关于它的事情 猜猜你正在使用标准 块大小。 可能值得 使用大块大小 桌子让你可以变得更好 压缩(因为压缩是 按块完成,a中的数据越多 阻止更多Oracle可以压缩)。 我不愿意这样说, 因为99%的时候都是人 改变它不做的块大小 他们认为应该如何。但随着 可能会有如此大量的数据 值得考虑。