【发布时间】:2023-04-05 04:33:01
【问题描述】:
DB2/z v10 的 DB2 文档在 tablespaces section 中有以下 sn-p:
作为一般规则,每个表空间中应该只有一个表。
但它实际上并没有为此提供任何理由。
我们有一些表格存储基于时间的历史信息,大致如下(复杂性大大降低,但应该足以说明):
Table HOURLY_CPU_USAGE:
RecDate date
RecTime time
Node char(32)
MaxCpuUsage float
primary key (RecDate, RecTime, Node)
Table DAILY_CPU_USAGE:
RecDate date
Node char(32)
MaxCpuUsage float
primary key (RecDate, Node)
Table MONTHLY_CPU_USAGE:
RecDate date
Node char(32)
MaxCpuUsage float
primary key (RecDate, Node)
(日表将所有小时记录汇总到一天中,月表对日数据执行相同操作,将其汇总到日期为YYYY-MM-01的行中。
现在在我看来,这些表的用途都非常相似,我不确定为什么我们要将它们保存在单独的表空间中。
暂时不考虑将它们组合到一个表中的可能性,这是我提出的建议,但有一些复杂因素阻碍了它。
是“每个表空间一个表”准则背后的基本原理是什么?有哪些例外(如果有)?我假设它们可能是例外,因为这似乎是一个指导方针,而不是一个硬性规定。
【问题讨论】:
-
我认为这与
PAGESIZE(及其分段)有关,尽管我不完全确定。但是,此规则与建议的最大表空间数相结合,将产生非常小的表集。在这种情况下,您可能可以合理地将它们放入一个表空间 - 数据集很小且相关。我不会将它们合并到一个表中 - 只需要一位新程序员来汇总所有记录,而不是一种类型。无论如何,如果您实际上有足够的数据来保证它,那么这些其他表应该可能是 MQT。 -
@X-Zero,你应该把它作为一个答案,即使假设可以得出答案,也是有用的。 MQT 是一个很好的建议,这是我们现在在我们的代码中明确地做的事情 - 我不确定在保留期不同的情况下它会如何工作(每小时 10 天,每天 1 个月,2 年每月),但这绝对是我会研究的。
标签: db2 mainframe zos tablespace