如何确定在notifyix表创建中将哪些值作为扩展区大小和下一个大小放置?

时间:2018-12-04 04:51:42

标签: informix database-administration

假设我要在Informix数据库中创建下表。

create table table_name 
  (
    col1 date,
    col2 smallint,
    col3 char(12),
    col4 char(12),
    col5 char(12),
    col6 integer,
    col7 integer,
    col8 datetime year to second,
    col9 datetime year to second,
    col10  datetime year to second,
    col11  datetime year to second,
    col12  datetime year to second,
    col13 CHAR(1),
    col14 CHAR(1),
    col15 CHAR(1)
  ) in db_space extent size ? next size ? lock mode row;

假设将要发生三种情况。

1.reference表,该表中将存储100000条记录

2.data表,每天添加记录数为1000

3.data表,每月添加记录数为100000

我对如何根据上述方案确定扩展区大小感到困惑。其背后的逻辑是什么?

1 个答案:

答案 0 :(得分:1)

第一步是将列的大小相加,以确定每行使用多少空间-或创建一个虚拟表并从系统目录中获取大小。每行大小为93字节。还有一些插槽开销和页面开销。您每2 KiB页大约可获得20行,而每4 KiB页则可获得40行以上。对于实用的心理算术,忽略记录,并假设每页2000或4000字节,则将记录视为100字节。

方案1:100,000行,最小增长。

  • 如果您的系统使用2 KiB页面,则大约需要5,000页;如果它使用4个KiB页面,则大约为2500,但是由于您在KiB中指定了扩展数据块大小,因此答案基本相同-您需要第一个扩展数据块大小为10,000(KiB)。由于表不会增长,因此下一个扩展区大小并不重要;使用1,000 KiB。我没有考虑任何索引;那些也需要空间。

方案2:每天1,000行。

  • 每天需要大约100 KB的数据空间。您不会说删除记录,因此我们假设它会持续增长。 Informix采用扩展数据块大小的策略来减少扩展数据块的数量,因此您需要确定表的大小。每年使用400天(我们在这里指的是整数),每天使用100 KB,则每年需要40 MB。在这种情况下,我会考虑在第一个和下一个扩展区大小中使用40,000。这可能比您想要的要大-您可以向下调整它,但我建议在第一个范围内至少设置10,000,下一个尺寸大致相同。

服务3:每天100,000条记录。

  • 在这里,您每天要使用10 MB,每年要使用4 GB。您可能需要考虑使用基于日期的范围分区方案对此进行分段,以便可以在适当的时候删除(旧)分段。但是,假设您总共存储了至少一年的价值,那么我想考虑的是第一个扩展区大小为300,000(300 MB,大约一个月的值),而下一个扩展区大小相同。

通常,不要对范围大小感到困惑。由于扩展区大小加倍,因此,如果选择的数字太小,Informix会通过自动分配较大的扩展区来进行补偿。如果发现下一个尺寸太大,则可以更改下一个尺寸。但是,这些大小都不是很大-如今,每年4 GB是服务器存储领域的零钱,即使这是SSD而不是旋转磁盘。您每年需要保持在TB的范围内,然后才需要担心太多。值得关注空间,但是不值得花费比我更多的算术计算。

不要忘记您的索引。


对Informix 12.10的IBM文档的某些引用: