使用 CTAS 命令后 Netezza 表大小增加
Posted
技术标签:
【中文标题】使用 CTAS 命令后 Netezza 表大小增加【英文标题】:Netezza table size increased after using CTAS command 【发布时间】:2016-12-03 10:14:20 【问题描述】:我在 Netezza 中有一个大表,表大小约为 600 GB。 当我尝试从现有表创建新表时,表大小增加了。新表大小为 617 GB。
我用来创建新表的 SQL: create table new_table_name as select * from old_table_name distribution on (column_name); 生成关于 new_table_name 的统计信息; 但是新表和旧表的行数相同。
增加表大小的原因可能是什么?
提前致谢。
【问题讨论】:
old_table_name
的分布是否也在column_name
上?
没有。在旧表中,我们没有任何分配键。
而当您说“表大小”时,您是指已用空间还是已分配空间?
旧表 - 已用 MB 612606 和总 MB 614126;新表 - 已用 MB 635627 和总 MB 636985。
【参考方案1】:
表的“大小”有两个相关度量:分配大小和使用大小(均以字节为单位) _v_table_storage_stat 将帮助您查看给定表的两种大小
对于小表,分配的大小可以比使用的大小大很多倍,假设行分布均匀,每个数据片至少分配 3MB。我的大部分工作都是在具有 480 个数据切片的双机架 MAKO 系统上完成的。因此,任何小于 14.4GB 的表都或多或少与“大小”的优化无关
不过,我将尝试解释您所看到的: 你必须意识到 1) Netezza 中的所有数据都经过压缩。 2) 正在对每个单独数据片上的“块”数据进行压缩。 3)如果每个块中的数据与可想象的最“混合”情况相比具有许多相似性,则压缩比(压缩后的数据大小除以之前的大小)会变得更好(更小)。 4)“分发”和“组织”都可以影响这一点。向表中添加数据时使用的 select 语句中的“order by”甚至“group by”也可以这样做
在我的系统中,我有一个非常宽的表格,每天有几个“副本”我们客户的银行账户。每个副本都与前一个副本 99% 相同,只有“平衡”之类的变化。
通过在 accountID 上分发并在 AccountID、Timestamp 上进行组织 - 我看到大小减小了 10-15%。一些数据切片效果更好,因为它们包含大量的“系统”帐户 ID,这些 ID 在数据中具有不同的模式。
简而言之: A) 这是完全自然的 B)不要太担心,因为: C) Netezza 系统上的“大”表与内存太少且磁盘速度慢的 4 核数据库上的表不同:)
【讨论】:
以上是关于使用 CTAS 命令后 Netezza 表大小增加的主要内容,如果未能解决你的问题,请参考以下文章