Вакуум красного смещения не восстанавливает пространство

У меня есть кластер Redshift, состоящий из 2 узлов с дисками по 160 Гб. Я случайно получаю сообщение об ошибке «Диск заполнен» при выполнении вакуума или любого другого запроса. Использование моего диска составляет 92%. Я удалил больше половины старых строк в таблице размером 10515 Мб, но даже после перезагрузки кластера эффекта нет, и таблица остается того же размера, хотя счетчик показывает новое количество строк. Я должен был увидеть, по крайней мере, небольшое снижение использования диска, но ничего.

Кто-нибудь знает, что это может быть? Является ли удаление таблицы в этом случае единственным вариантом?


person viktor117    schedule 29.03.2021    source источник


Ответы (1)


Здесь есть несколько возможностей, но сначала позвольте мне проверить факты. У вас есть кластер dc2.large с двумя узлами, и он заполнен на 92% диска. Это слишком заполнено, и его необходимо уменьшить, чтобы обеспечить временное пространство для выполнения запроса. У вас есть таблица размером 10515 блоков. Чтобы решить проблему с дисковым пространством, вы удалили 1/2 строк в рассматриваемой таблице, а затем очистили таблицу. После завершения вы не увидели никаких изменений ни в пространстве кластера, ни в размере таблицы, ни в одном блоке разницы в размере таблицы. У меня это правильно?

Первая возможность заключается в том, что вакуум не завершился правильно. Вы упомянули, что получаете сообщения о заполнении диска даже при очистке. Так может быть, вакуум, который вы пробовали, не завершается? Вы видите, что вакууму требуется временное пространство для сортировки данных таблицы, и если у вас есть кластер, который стал слишком полным, вакуум может дать сбой. В этом случае вы можете запустить очистку только для удаления, которая не будет пытаться сортировать таблицу, а просто освободит место на диске. Это будет иметь более высокую вероятность успеха в ситуации полного диска.

Другая возможность заключается в том, что удаление строк завершилось неправильно или не было зафиксировано до запуска очистки. Это приведет к тому, что очистка будет выполняться на полном наборе строк.

Также возможно, что рассматриваемая таблица очень широкая (много столбцов). Это важно из-за того, как Redshift хранит данные — каждый блок имеет размер 1 МБ, и каждому столбцу нужен блок для своих данных. Этот кластер имеет 4 среза, и если эта таблица имеет ширину 1500 столбцов (да, это глупо), таблица займет 6000 блоков только для хранения первых 4 строк. Тогда для добавления строк не потребуется дополнительного места на диске, пока эти блоки не начнут заполняться. Размер таблицы будет перемещаться очень большими кусками, и при удалении строк размер может не измениться, за исключением больших кусков. Это вряд ли произойдет, если вы видите ТОЧНО такое же количество блоков, но если вы просто видите изменения в блоках, которые меньше, чем вы ожидаете, это может быть в игре.

Возможно, произошло какое-то другое недоразумение. Вакуум только для сортировки не освободит место. Тип узла не тот, что я думаю. Таблица может жить в S3 и иметь доступ через спектр. Но судя по описанию это маловероятно.

НЕЗАПРОШЕННЫЙ СОВЕТ: Вы на правильном пути, освобождая место на диске, но вам нужно предпринять больше действий, чем просто уменьшить эту таблицу. (Я ожидаю, что вы понимаете это, и это только начало.) В большинстве случаев вы должны работать с заполненным диском ниже 70% - это зависит от рабочей нагрузки и размера таблицы, но является хорошим общим правилом. Это означает сокращение большого количества данных на ваших дисках или увеличение количества узлов (и стоимости). Одним из вариантов может быть перенос некоторых данных на S3 и использование Spectrum для доступа. Если вам нужно больше хранилища без дополнительных вычислений, вы можете посмотреть на узлы, оптимизированные для хранения, но, поскольку вы находитесь на самом маленьком конце Redshift, они, вероятно, не принесут вам пользы. Вам нужно 1) удалить ненужные данные, 2) перенести некоторые данные на S3 и использовать Spectrum или 3) добавить узел в свой кластер.

person Bill Weiner    schedule 29.03.2021
comment
Спасибо, Билл Вайнер. Вы все правильно поняли. После публикации сообщения я пошел чистить другие таблицы, и тогда был виден результат, который я ожидал. Исходная таблица, которая состояла из 10515 блоков, была фактически уменьшена вместе с другими, которые я очистил. Некоторые другие большие таблицы по-прежнему показывают тысячи несортированных мегабайт, поэтому требуется дополнительная очистка. + варианты 2 и 3 - то, что я сделаю дальше - person viktor117; 30.03.2021