DB2 v10 zos:识别空闲索引值

Posted

技术标签:

【中文标题】DB2 v10 zos:识别空闲索引值【英文标题】:DB2 v10 zos : identify free index values 【发布时间】:2014-09-03 17:12:19 【问题描述】:

我的组织有数百个 DB2 表,每个表都有一个随机生成的唯一整数索引。随机值由 COBOL CICS 大型机程序或 Java 分布式应用程序生成。采用的常规方法是随机生成一个整数值(仅使用正值),然后尝试插入数据行,当重复的索引值已被持久化时重试。我想提高这种方法的性能,并且我正在考虑尝试识别尚未生成并保留到每个表的整数值,这意味着我们不需要重试。我们会知道我们的插入会起作用。 db2有没有可以返回未使用的索引值的函数?

【问题讨论】:

听起来你应该考虑使用sequences bhamby,感谢您查看此内容,但序列不是可接受的解决方案。它必须是随机的,并且序列是递增的 【参考方案1】:

简短的回答是否定的。

稍长一点的答案是指出,如果存在这样的函数,在您的情况下,在您第一次插入其中一个表时,它将返回的结果集的大小将是 2,147,483,647(正)整数。每个 4 字节,即 8,589,934,588 字节。

鉴于您现有系统的限制,您正在做的可能是可以做到的最好的。如果重试的性能无法接受,恐怕下一步就是重新设计您的密钥方案。

我认为这是一个要问的问题:这种使用随机数作为唯一键的方案是否会导致性能问题?随着表填满键空间,您将看到越来越多的重试,但您的键空间相对较大。如果您看到大量重试,可能您的随机数没有您想要的随机数。

【讨论】:

cschneid,感谢您查看我的问题;我的解决方案是这样的;一世)。生成下限为随机正整数。 ii)。通过将常数 X(例如 50)添加到我的随机下限来计算上限。三)。用我的 LOWER 和 UPPER 限制之间的所有数字填充 java ArrayList。 iv)。从 DB2 表中检索所有使用的整数值的 ArrayList。五)。从步骤 iii .vi) 中生成的 ArrayList 中删除上一步中返回的所有值。我现在有一个 ArrayList 包含当前表的所有可用索引值。【参考方案2】:

只是一个想法,但您可以对一组表使用一个序列。通过这种方式,该值仍然是随机的(因为您不知道执行插入的下一个表是哪个表)但是基于特定的序列,这意味着大多数时候您不会重试,因为数字不断上升。同样的序列可以在几亿次插入后循环并开始“填补空白”。

就其他关键思想而言,您也可以尝试使用不同的密钥,可能是基于 Timestamp 或 Rowid 的密钥。这仍然是随机的,但不会重复。

【讨论】:

以上是关于DB2 v10 zos:识别空闲索引值的主要内容,如果未能解决你的问题,请参考以下文章

DB2 Zos 浅谈 - DB2 LUW VS DB2 Zos

Db2 9.1 zos 上的 SOAPHTTPNV

用于模式的 zOS 目录表上的 DB2?

sql DB2 for zOS PLAN情报

sql DB2 for zOS EXPLAIN情报抽出

sql DB2 for zOSパッケージ情报抽出