1

对于 z/OS 上的 DB2,以下 SQL 查询可能产生的最大结果数是多少?

SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE='T' AND CREATOR=? ORDER BY NAME ASC

此查询旨在获取 DB2 子系统中特定模式/创建者下的所有表名的列表。


我很难找到明确的答案。根据 IBM 的“ DB2 for z/OS 中的限制”一文,DB2 数据库的最大内部对象数为 32767。对象包括视图、索引等。

对于一个模式下的最大表名数量,我更喜欢一个更具体的答案。例如,以下是相关问题的IDUG 线程的摘录:

基于一个数据库中 32767 个对象的限制,其中每个表空间有两个条目,表和索引各有一个条目,那么理论上的最大值似乎是,每个数据库有一个表空间,32767 - 2(对于单个表空间) = 32765 / 2 = 16382 个表,假设每个表至少需要一个索引。

这些假设是否有效(每个表空间有两个条目,每个表至少有一个索引)?

4

2 回答 2

1

假设每个表至少需要一个索引。

这个假设似乎不成立。表并不总是有索引。而且您正在考虑有人已经在做一些奇怪的事情的边缘情况,所以我绝对不会认为每个表上都会有索引。*

如果您真的想处理所有可能的情况,我认为您需要假设您最多可以拥有 32765 个表(如引用中所述,表空间需要两个对象标识符)。

*此外,您链接的文档中的脚注表明索引占用两个内部对象描述符。因此,该引用中的数学也是不正确的。如果每个表都有索引,则实际上将是 10921 个表。但无论如何,我认为这无关紧要。

于 2017-05-04T10:55:02.717 回答
1

我不确定您的假设是否合适,因为要考虑的可能性太多了,而且从总体上看,从您的角度来看,答案可能不会有太大的不同

我会改写你的问题以确保我正确理解你,你是在最大行数之后,即最坏的情况,你的 SQL 查询可能会返回?

DB2 系统限制

最大数据库

受系统存储和 EDM 池大小限制

最大数据库数

65217

每个数据库的最大内部对象数

32767

外部对象的内部对象描述符(OBD)的数量如下

表空间:2(最低要求)

表格1

因此,您的 SQL 查询的最大行数:

65217 * (32767 - 2) = 2,136,835,005

NB DB2 for z/OS 在模式和数据库之间没有 1:1 的比例

NNB 这个数字假设有 32,765 个表/表空间/数据库,即 32765:1:1

我确信±20亿行对于可能出现在模式下的最大表名数量不是“合理”的期望,但这是可能的

于 2017-06-08T03:56:16.137 回答