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 不会生成重做。(如果您的表空间已经设置为 NOLOGGING,这可能是不必要的。)

  3. 并行:您肯定希望对这张表使用并行性。由于此表对于您的系统可能不常见,因此最好在语句或会话级别定义并行性。但是,如果您无法控制针对此表运行的所有语句,您可能需要考虑在此处定义度数以确保语句不会连续运行。

  4. 删除未知选项:我认为您应该删除所有未专门设置或不理解的选项。如果您使用 TOAD 或 DBMS_METADATA 之类的工具来生成脚本,它们将始终列出每个选项,但通常您应该将大部分内容排除在外,让 Oracle 使用它喜欢的任何内容。

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

  6. 块大小:我不确定“mytablespace”的设置是什么,但是由于您没有提及它,我猜您正在使用标准块大小。可能值得为此表使用较大的块大小,这样您可以获得更好的压缩(因为压缩是按块完成的,所以块中的数据越多,Oracle 可以压缩的越多)。我不愿意提出这个建议,因为 99% 的时间当人们改变块大小时,它并没有按照他们认为的那样做。但有了如此大量的数据,它可能值得考虑。

于 2011-03-24T03:40:45.957 回答