[英]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.