如何确定在 informix table 创建中将哪些值作为扩展大小和下一个大小?
How to determine which values to put as extent size and next size in informix table creation?
假设我要在 Informix 数据库中创建以下 table。
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 table, 100000 条记录将存储在此 table
2.datatable,每日添加记录数为1000条
3.datatable,每月添加记录数为100000条
我对如何根据上述情况确定范围大小感到困惑。这背后的逻辑是什么?
第一步是将列的大小相加以确定每行使用了多少 space — 或者创建一个虚拟 table 并从系统目录中获取大小。这给出了每行 93 字节的大小。还有一些插槽开销和页面开销;每 2 KiB 页面可以获得大约 20 行,每 4 KiB 页面可以获得 40 多行。对于实用的心算,将记录视为每条 100 字节,忽略开销,并假设每页 2000 或 4000 字节。
场景 1:100,000 行,最小增长。
- 如果您的系统使用 2 KiB 页面,则需要大约 5,000 页;如果它使用 4 KiB 页面,则大约为 2,500,但由于您以 KiB 为单位指定范围大小,因此答案基本相同 — 您需要 10,000 (KiB) 的第一个范围大小。由于 table 不会增长,因此下一个范围大小并不重要;使用 1,000 KiB。我没有考虑任何索引;那些还需要 space.
场景 2:每天 1,000 行。
- 每天大约需要 100 KB 的数据space。你没有说任何关于被删除的记录,所以我们假设持续增长。 Informix 采用扩展区大小加倍策略来减少扩展区的数量,因此您需要决定 table 的大小。使用每年 400 天(我们在这里讨论整数)和每天 100 KB,您每年需要 40 MB。在这种情况下,我会考虑使用 40,000 作为第一个和下一个范围大小。这可能比您想要的要大 — 您可以将其调低,但我建议第一个范围至少为 10,000,下一个大小大致相同。
场景 3:每天 100,000 条记录。
- 在这里,您每天使用 10 MB,每年使用 4 GB。您可能会考虑使用基于日期的范围分区方案对其进行分段,以便您可以在适当的时候删除(旧的)片段。但是,假设您总共存储至少一年的价值,我会考虑第一个扩展区大小为 300,000(300 MB,大约一个月的价值),下一个扩展区大小相同。
一般来说,不要纠结于盘区大小。由于盘区大小加倍,如果您选择的数字太小,Informix 会随着时间的推移自动分配更大的盘区进行补偿。如果您发现下一个尺码太大,您可以更改下一个尺码。但是,这些大小中的 none 非常大 — 如今服务器存储世界每年 4 GB 是零用钱,即使那是 SSD 而不是旋转磁盘。在您需要担心太多之前,您需要在每年 TB 的范围内。值得关注space,但不值得花比我多的算术计算。
不要忘记你的索引。
对 Informix 12.10 的 IBM 文档的一些引用:
假设我要在 Informix 数据库中创建以下 table。
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 table, 100000 条记录将存储在此 table
2.datatable,每日添加记录数为1000条
3.datatable,每月添加记录数为100000条
我对如何根据上述情况确定范围大小感到困惑。这背后的逻辑是什么?
第一步是将列的大小相加以确定每行使用了多少 space — 或者创建一个虚拟 table 并从系统目录中获取大小。这给出了每行 93 字节的大小。还有一些插槽开销和页面开销;每 2 KiB 页面可以获得大约 20 行,每 4 KiB 页面可以获得 40 多行。对于实用的心算,将记录视为每条 100 字节,忽略开销,并假设每页 2000 或 4000 字节。
场景 1:100,000 行,最小增长。
- 如果您的系统使用 2 KiB 页面,则需要大约 5,000 页;如果它使用 4 KiB 页面,则大约为 2,500,但由于您以 KiB 为单位指定范围大小,因此答案基本相同 — 您需要 10,000 (KiB) 的第一个范围大小。由于 table 不会增长,因此下一个范围大小并不重要;使用 1,000 KiB。我没有考虑任何索引;那些还需要 space.
场景 2:每天 1,000 行。
- 每天大约需要 100 KB 的数据space。你没有说任何关于被删除的记录,所以我们假设持续增长。 Informix 采用扩展区大小加倍策略来减少扩展区的数量,因此您需要决定 table 的大小。使用每年 400 天(我们在这里讨论整数)和每天 100 KB,您每年需要 40 MB。在这种情况下,我会考虑使用 40,000 作为第一个和下一个范围大小。这可能比您想要的要大 — 您可以将其调低,但我建议第一个范围至少为 10,000,下一个大小大致相同。
场景 3:每天 100,000 条记录。
- 在这里,您每天使用 10 MB,每年使用 4 GB。您可能会考虑使用基于日期的范围分区方案对其进行分段,以便您可以在适当的时候删除(旧的)片段。但是,假设您总共存储至少一年的价值,我会考虑第一个扩展区大小为 300,000(300 MB,大约一个月的价值),下一个扩展区大小相同。
一般来说,不要纠结于盘区大小。由于盘区大小加倍,如果您选择的数字太小,Informix 会随着时间的推移自动分配更大的盘区进行补偿。如果您发现下一个尺码太大,您可以更改下一个尺码。但是,这些大小中的 none 非常大 — 如今服务器存储世界每年 4 GB 是零用钱,即使那是 SSD 而不是旋转磁盘。在您需要担心太多之前,您需要在每年 TB 的范围内。值得关注space,但不值得花比我多的算术计算。
不要忘记你的索引。
对 Informix 12.10 的 IBM 文档的一些引用: