我需要计算表空间大小,部分计算需要 INITRANS 的值,我不完全理解,我不确定是否应该使用默认值 2。
我的业务规则指定数据从多达 50 个不同的位置插入,所以我假设一些并发,这是否表明我应该使用 50 的 INITRANS 还是我误解了 INITRANS 是什么?
一如既往:这取决于。然而,在大多数情况下,默认值就足够了。
仅处理 50 个并发插入(事务)的业务需求并不意味着需要设置 INITRANS 50。它们真的是并发的吗?交易的持续时间是否会相互重叠,因此它们真的同时发生?所有的50?
INITRANS 指定数据库块中事务槽(ITL 槽)的最小数量。当然,如果需要,ITL 插槽的数量可以增加,由数据库管理。最大数量取决于数据库块大小(因为不允许 ITL 条目占据数据库块的 50% 以上,并且 1 个 ITL 条目需要 24 个字节)和 MAXTRANS(从 10.2 版开始为 255)。
因此,如果:
那么是的,数据库块将需要 50 个 ITL 插槽。但即便如此,您很可能也不需要将 INITRANS 设置为 50,因为数据库会自动管理它,而 50 远低于标准 8K 数据库块中的实际限制。
对于DELETE
、UPDATE
、SELECT ... FOR UPDATE
,这可能不是真的,因为当它们发生时,数据库块很可能已满,并且在这种情况下 ITL 插槽的数量可能不会增加。想象一个完整的数据库块,它存储 50 行并有 2 个 ITL 槽,50 个并发事务想要用SELECT ... FOR UPDATE
. 但是INSERT
对于使用空数据库块或继续写入其中有可用空间的现有块的 , 这应该不是问题。
请注意,这里有很多 ifs、mays 和问题,正如我所说,在大多数情况下,默认值就足够了。是的,我可以创建一个像上面一样工作的人工示例,但幸运的是,实际场景是不同的。