1

我们正在尝试在 2 台主机服务器中上传 80 GB 的数据,每台服务器都有 48 GB RAM(总共 96 GB)。我们也有分区表。但即使在分区之后,我们最多只能上传 10 GB 的数据。在 VMC 界面中,我们检查了尺寸工作表。表中的行数为 40,00,00,000,表最大大小为 1053,200,000k,最小大小为 98,000,000K。那么,即使在分区后上传 80GB 有什么问题,这个表大小是多少?

4

1 回答 1

1

大小工作表根据表的架构提供行数将占用的内存中的最小和最大大小。如果您有 VARCHAR 或 VARBINARY 列,则 min 和 max 之间的差异可能非常大,您的实际内存使用量通常介于两者之间,但可能难以预测,因为它取决于您加载的字符串的实际大小.

但我认为问题在于,根据工作表,最小大小为 98GB,这意味着如果任何可空字符串为空,或者任何非空字符串都是空字符串。即使不考虑堆大小和任何开销,这也高于您的 96GB 容量。

你的 kfactor 设置是什么?如果为 0,则每条记录只有一个副本。如果为 1,则每条记录将有两个副本,因此在该配置中您确实需要至少 196GB。

RAM 中每条记录的大小取决于选择的数据类型以及是否有任何索引。此外,超过 15 个字符或 63 个字节的 VARCHAR 值存储在池化内存中,这比固定宽度存储带来更多开销,但如果值小于最大大小,它可以减少浪费的空间。

如果您想要一些关于如何最小化内存中每条记录大小的建议,请分享您的表和任何索引的定义,我可能会建议可以减少大小的调整。

您可以向集群添加更多节点,或者使用具有更多 RAM 的服务器来增加容量。

免责声明:我为 VoltDB 工作。

于 2017-10-31T15:55:16.000 回答