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只是一个想法,但您可以对一组表使用一个序列。通过这种方式,该值仍然是随机的(因为您不知道执行插入的下一个表是哪个表)但是基于特定的序列,这意味着大多数时候您不会重试,因为数字不断上升。同样的序列可以在几亿次插入后循环并开始“填补空白”。
就其他关键思想而言,您也可以尝试使用不同的密钥,可能是基于 Timestamp 或 Rowid 的密钥。这仍然是随机的,但不会重复。
【讨论】:
以上是关于DB2 v10 zos:识别空闲索引值的主要内容,如果未能解决你的问题,请参考以下文章