почему размер файла AWS отличается между Redshift и S3? - PullRequest
0 голосов
/ 06 февраля 2020

Я выгружаю таблицы из Redshift в S3 для резервного копирования. Поэтому я проверяю, чтобы файлы были готовы, если они нам понадобятся снова.

Я только что разгрузил таблицу размером 1056 в соответствии с:

select "table", size, tbl_rows
FROM svv_table_info;

Согласно документации, размер равен «в блоках данных 1 МБ», поэтому эта таблица используя 1056 МБ. Но после копирования на S3 размер файла составляет 154 МБ (просмотр в консоли AWS).

Я скопировал обратно в Redshift, и все строки там, так что это связано с «блоками данных 1 МБ». Это связано с тем, как оно сохраняется в файловой системе, да?

Может кто-нибудь объяснить, пожалуйста? Спасибо.

1 Ответ

2 голосов
/ 07 февраля 2020

Итак, вы спрашиваете, почему в представлении SVV_TABLE_INFO утверждается, что таблица потребляет 1 ГБ, но при ее сбросе на диск получается только 154 МБ?

Существует две основные причины. Во-первых, вы активно обновляете таблицу, но не пылесосите ее. Когда строка обновляется или удаляется, Redshift фактически добавляет новую строку (да, хранится в виде столбцов) и надгробия старой строки. Чтобы освободить это место, вы должны регулярно пылесосить стол . В то время как Redshift будет выполнять некоторую очистку в фоновом режиме, этого может быть недостаточно, или это может не произойти во время просмотра.

Вторая причина заключается в том, что для хранения табличных данных требуются дополнительные затраты. Каждый столбец в таблице хранится в виде списка блоков размером 1 МБ, один блок на срез (и несколько срезов на узел). В зависимости от размера вашего кластера и типа данных столбца это может привести к значительному потере места.

Например, если вы храните 32-разрядные целые числа, один блок размером 1 МБ может хранить 256 000 таких целых чисел. требуется всего 4 блока для хранения 1 000 000 значений (что, вероятно, близко к числу строк в вашей таблице). Но, , если у вас кластер из 4 узлов, по 2 среза на узел (ie, dc2.large), тогда вам фактически потребуется 8 блоков, потому что столбец будет разбит на все ломтики.

Количество блоков, используемых каждым столбцом, можно увидеть в STV_BLOCKLIST .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...