Мы запускаем postgresql 9.5.2 в экземпляре RDS. Одна вещь, которую мы заметили, заключалась в том, что некоторая таблица иногда растет очень быстро по размеру.таблица быстрого роста в postgresql
В рассматриваемой таблице имеется только 33 тыс. Строк и ~ 600 столбцов. Все столбцы являются числовыми (десятичными (25, 6)). После полного заполнения вакуума «total_bytes», как сообщается в следующем запросе
select c.relname, pg_total_relation_size(c.oid) AS total_bytes
from pg_class c;
составляет около 150 МБ. Однако мы заметили, что это выросло до 71 ГБ в какой-то момент. В недавнем эпизоде total_bytes увеличился на 10 ГБ за 30 минут.
Во время упомянутого выше эпизода у нас был пакетный запрос обновления, который запускается ~ 4 раза в минуту, который обновляет каждую запись в таблице. Однако в других случаях размер таблицы оставался неизменным, несмотря на аналогичные действия по обновлению.
Я понимаю, что это, вероятно, вызвано «мертвыми записями», оставшимися после обновлений. Действительно, когда эта таблица становится слишком большой, просто работающий вакуум полностью сжимает ее до нормального размера (150 М). Мои вопросы:
есть ли у других людей быстрый рост в размере стола в postgresql и это нормально?
Если наши запросы обновления пакета вызывают быстрый рост размера таблицы, почему это не происходит каждый раз? На самом деле я пытался воспроизвести его вручную, запустив что-то вроде
обновления my_table набора х = х * 2
, но не смогли - таблица размеров остались прежним до и после запроса.
600 колонок звучит как плохой дизайн базы данных. Неудивительно, что размер может быстро увеличиваться при быстром добавлении записей, особенно если многие из этих колонок используют значительное количество пространства. –