Итак, вы спрашиваете, почему в представлении SVV_TABLE_INFO
утверждается, что таблица потребляет 1 ГБ, но при ее сбросе на диск получается только 154 МБ?
Существует две основные причины. Во-первых, вы активно обновляете таблицу, но не пылесосите ее. Когда строка обновляется или удаляется, Redshift фактически добавляет новую строку (да, хранится в виде столбцов) и надгробия старой строки. Чтобы освободить это место, вы должны регулярно пылесосить стол . В то время как Redshift будет выполнять некоторую очистку в фоновом режиме, этого может быть недостаточно, или это может не произойти во время просмотра.
Вторая причина заключается в том, что для хранения табличных данных требуются дополнительные затраты. Каждый столбец в таблице хранится в виде списка блоков размером 1 МБ, один блок на срез (и несколько срезов на узел). В зависимости от размера вашего кластера и типа данных столбца это может привести к значительному потере места.
Например, если вы храните 32-разрядные целые числа, один блок размером 1 МБ может хранить 256 000 таких целых чисел. требуется всего 4 блока для хранения 1 000 000 значений (что, вероятно, близко к числу строк в вашей таблице). Но, , если у вас кластер из 4 узлов, по 2 среза на узел (ie, dc2.large
), тогда вам фактически потребуется 8 блоков, потому что столбец будет разбит на все ломтики.
Количество блоков, используемых каждым столбцом, можно увидеть в STV_BLOCKLIST .
.