4

DB2/z v10 的 DB2 文档在表空间部分有以下片段:

作为一般规则,您应该在每个表空间中只有一个表。

但它实际上并没有为此提供任何理由。

我们有一些表格存储基于时间的历史信息,大致如下(复杂性大大降低,但应该足以说明):

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)

(每日表将所有每小时记录汇总到一天中,而每月表对每日数据执行相同操作,将其汇总到带有 date 的行中YYYY-MM-01)。

现在在我看来,这些表的用途都非常相似,我不确定为什么我们要将它们保存在单独的表空间中。

现在折扣将它们组合成一个表的可能性,这是我提出的一个建议,但有一些并发症阻止它。

“每个表空间一个表”准则背后的基本原理是什么?有哪些例外(如果有)?我假设它们可能是例外,因为这似乎是一个指导方针,而不是一个硬性规定。

4

4 回答 4

5

这些天来,每个表空间维护一个表的主要原因是管理性的。大多数 DB2 实用程序都在表空间级别工作。例如,如果您对特定表的表空间执行 LOAD REPLACE,那么所有其他表最终都将为空,因为 LOAD REPLACE 所做的第一件事就是删除所有行。

那么“为什么不为每个表空间保留一张表?”。我认为当一个表与一个没有另一个无用的程度相关时,在一个表空间中包含多个表是合理的,甚至是可取的。例如。客户表 + 下一个客户 ID 表。

另一个考虑因素是表空间的类型。根据您创建的表空间的类型,在单个表空间中创建多个表可能会影响性能。如果您不使用分段表空间,则表空间扫描将读取表空间中的所有页面,包括来自其他表的页面。请参阅此处的“表空间扫描”主题:http: //publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp ?topic=%2Fcom.ibm.db2.doc.ve%2Fdvnhlpcn_tablescan.htm

于 2012-03-19T07:21:18.210 回答
4

似乎他们已经更改了文档上的文本。

问题中提供的链接现在包含以下信息:

您应该在表空间中定义的表的数量取决于表的特征:

如果表可能变大,最好将表放在自己的表空间中。这种设计简化了性能调优,尤其是缓冲池调优。对于较小的表,多表分段表空间更好。这种设计有助于减少需要管理以进行备份和恢复的数据集数量,以及数据库系统在 DB2 操作期间需要打开和关闭的数据集数量。

最好尽量减少每个数据库中的表空间数量,原因如下:

在数据定义语句的执行过程中,数据库系统对整个数据库持有排他锁,直到执行提交操作。排他锁执行以下功能: 排他锁防止对同一数据库中的表和索引同时执行数据定义语句。如果动态语句缓存被禁用(子系统参数 CACHEDYN=NO),数据库系统使用数据库锁来序列化执行数据定义语句和访问数据库中表和索引的动态 SQL 语句。

如果数据库中的表空间较少,则同时锁定的表空间也较少。在线REORG实用程序操作的SWITCH阶段执行过程中,数据库系统获取整个数据库的排他锁,以序列化在线REORG操作和数据库中表和索引的数据定义语句的执行。

如果数据库中的表较少,则同时锁定的表也较少。当数据库中的表空间较少时,数据定义语句的日志记录量较小。

于 2015-02-03T20:59:23.347 回答
2

只是一个疯狂的猜测......但也许 IBM 建议每个表空间不超过一个表,因为许多 db/2 实用程序在表空间级别运行。如果将多个表放入一个表空间,那么实用程序会将所有表作为一个单元进行操作。

例如,备份和恢复工作在表空间级别。您不能备份/恢复同一表空间中的单个表。它们都作为一个单元进行备份或恢复。我相信同样的事情适用于其他实用程序,可能也适用于许多调整参数。

于 2012-02-21T23:17:31.907 回答
0

通常这是因为“每个表空间一个表”配置的性能选项往往更好。例如,如果表已分区(每个 TS 需要 1 Tb),则可以对某些查询执行有限分区扫描。

(但作为大型机性能人员,我会这么说,不是吗?):-)

于 2012-04-03T16:40:47.240 回答