[英]AWS Redshift column limit?
我一直在为一个新的应用程序做一些AWS Redshift的负载测试,我注意到它的每个表的列限制为1600。 更糟糕的是,随着表中列数的增加,查询速度会变慢。
这里没有任何意义的是Redshift应该是一个列存储数据库,理论上不应该是在特定where子句中未选择的列的I / O命中。
更具体地说,当TableName是1600列时,我发现下面的查询比TableName例如1000列和相同行数要慢得多。 随着列数的减少,性能提高。
SELECT COUNT(1) FROM TableName
WHERE ColumnName LIKE '%foo%'
我的三个问题是:
我无法准确解释为什么它减速太多但我能证实我们经历过同样的事情。
我认为部分问题是Redshift每个节点每列最少存储1MB。 拥有大量列会产生大量磁盘搜索活动和I / O开销。
此外,(刚刚发生在我身上)我怀疑Redshift的MVCC控件增加了很多开销。 它会尝试确保在查询执行时获得一致的读取,并且可能需要记录查询中表的所有块,甚至是未使用的列的块。 为什么在RedShift中在事务结束之前释放隐式表锁?
FWIW,我们的列实际上都是BOOLEAN
,我们通过将它们(位掩码)压缩成INT / BIGINT并使用逐位函数访问值得到了非常好的结果。 一个示例表从1400 cols(~200GB)到~60 cols(~25GB),查询时间提高了10倍以上(30-40下降到1-2秒)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.