【问题标题】:Create table statement for a very large table in oracle在oracle中为一个非常大的表创建表语句
【发布时间】:2011-07-21 18:30:39
【问题描述】:

我打算在一个表中存储大约 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
 )

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

【问题讨论】:

  • 在 5TB 时,您可能希望考虑在某处拥有主键或某些索引 :-)
  • 您可能需要分区或压缩。取决于 Oracle 版本以及您实际打算如何处理数据。

标签: oracle large-data


【解决方案1】:

在不了解整个系统的情况下很难给出好的建议。下面的想法是基于你的脚本和你之前的问题How do I design a table which will store very large data? 的猜测但是不要相信你读到的一切。你需要做很多测试。您可以轻松地花很多天时间来优化这样的表格。

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

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

  3. PARALLEL:你肯定想使用 与此表的并行性。自从 这张表可能不寻常 你的系统,最好是 在语句中定义并行性 或会话级别。但如果你不 可以控制所有 针对该表运行的语句 您可能需要考虑定义 这里的学位以确保 语句不会串行运行。

  4. 删除未知选项:我认为您应该删除所有 您没有特别指定的选项 设置,还是不明白。如果你 使用 TOAD 之类的工具或 DBMS_METADATA 生成脚本 他们总是会列出每一个选项, 但通常你应该离开大部分 把这些东西拿出来让 Oracle 使用 随心所欲。

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

  6. 块大小:我不确定是什么设置 “mytablespace”是,但既然你 我什么都没提 猜你正在使用标准 块大小。 可能值得 为此使用大块大小 表,这样你就可以变得更好 压缩(因为压缩是 每块完成,更多的数据在一个 Oracle 可以压缩的块越多)。 这个我懒得推荐 因为99%的时候人们 改变它不做的块大小 他们认为应该是什么。但随着 如此大量的数据可能 值得考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多