Ответ
Объем данных в PostgreSQL можно оценить с помощью системных функций. На последнем проекте общий размер базы составлял ~500 ГБ.
Основные запросы для анализа:
-
Размер всей базы данных:
SELECT pg_size_pretty(pg_database_size('имя_базы')) AS total_size; -
Размер таблиц с индексами (отсортировано):
SELECT schemaname || '.' || tablename AS table, pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS total_size FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC;
Практический опыт управления объемом:
- Партиционирование больших таблиц (например, по датам) для упрощения управления и очистки.
- Регулярный мониторинг и очистка устаревших данных с помощью
autovacuumи кастомных скриптов. - Оптимизация хранения под SSD (настройка
random_page_cost,effective_io_concurrency).
Ответ 18+ 🔞
Да ты посмотри, какие у нас тут запросы на разведку! Прямо как в шпионском фильме, только вместо секретных документов — размеры таблиц в базе. Ну что ж, давай разберёмся, как эту махину из 500 гигов обмерить, а то вдруг она уже на стенку полезла.
Вот тебе, друг мой, два главных инструмента для замера. Первый — как общий обмер всей квартиры:
SELECT pg_size_pretty(pg_database_size('имя_базы')) AS total_size;
Выполнишь — и сразу ясно, влезает ли твоя база на один жёсткий диск или уже пора арендовать под неё отдельный ангар.
А второй запрос — это уже детальная инвентаризация. Он покажет, кто у тебя там самый прожорливый, со всеми его индексами-придатками:
SELECT
schemaname || '.' || tablename AS table,
pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS total_size
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC;
Тут ты увидишь всех «толстячков» по убыванию. Обычно наверху оказывается какая-нибудь таблица логов, которая тихо и мирно сожрала половину твоего диска, пока ты чай пил.
А теперь, блядь, самое важное — что с этим безобразием делать? Опыт, сука, горький, но научил:
- Партиционирование — это святое. Если у тебя таблица растёт как на дрожжах, особенно по датам, — режь её на куски. Так и чистить старьё проще, и запросы быстрее, и Postgres не охуевает от одного гигантского файла.
- Чистка и вакуум — это как уборка в доме. Если не делать, зарастёшь говном и хламом. Настрой
autovacuumнормально, а для особо старых данных, которые уже никому не уперёшь, пиши скрипты и выноси их нахуй по расписанию. - SSD — наше всё. Если база крутится на ссдшках (а в наше время иначе уже и стыдно), не забудь постгресу намекнуть. Поправь
random_page_costдаeffective_io_concurrency, чтобы он не тупил, как будто всё ещё с магнитным диском имеет дело.
Вот так-то, дружище. Следи за объёмами, не давай базе распухать, как царю Колбасу из сказки, а то однажды просто не влезешь.