Размер таблицы ненормально растет в базе данных postgres - PullRequest
0 голосов
/ 26 августа 2018

Один из наших размеров базы данных составляет 50 ГБ.Из них в одной из таблиц 149444622 записей.Размер этой таблицы составляет 14 ГБ, а размер ее индексов - 16 ГБ.Общий размер таблицы и ее индексы составляют 30 ГБ.Я выполнил следующие шаги для этой таблицы.

reindex table table_name;

vacuum full verbose analyze on table_name;

Но все же размер таблицы и размер ее индексов не уменьшаются.Пожалуйста, ведите меня.Как продолжить дальше.

Структура таблицы, как показано ниже.

enter image description here

1 Ответ

0 голосов
/ 26 августа 2018

14 ГБ для ваших данных не является ненормальным.Давайте сделаем математику.

Простое сложение размеров ваших столбцов дает 68 байт на столбец.

2 bigints @ 8 bytes each    16 bytes
4 integers @ 4 bytes each   16 bytes
4 doubles @ 8 bytes each    32 bytes
1 date @ 4 bytes             4 bytes
                            --------
                            68 bytes

149 444 622 при 68 байтах каждый составляет около 9,7 ГБ.Это абсолютный минимальный размер ваших данных, если не было никаких накладных расходов базы данных. Но есть накладные расходы . Этот ответ составляет около 28 байтов на строку .68 + 28 - это 96 байт на строку.Это подводит нас к ... 14,3 ГБ.Как раз то, что у вас есть.


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

Наконец, учтите, что 50 ГБ - это довольно небольшая база данных.Например, самая маленькая платная база данных, предлагаемая Heroku , составляет 64 ГБ и всего 50 долларов в месяц.Это может быть ситуация, когда просто использовать больший диск.

...