Размеры таблиц базы данных¶
Назначение¶
Команда table_sizes позволяет получить информацию о размерах таблиц PostgreSQL, оценку количества строк и дату последней модификации файла на диске. Полезна для:
- мониторинга роста базы данных
- поиска кандидатов на очистку (устаревшие бэкапы, временные таблицы)
- анализа распределения данных по таблицам
Доступна как CLI-команда и как Python API.
Использование (CLI)¶
Базовый синтаксис¶
python manage.py table_sizes [опции]
Примеры команд¶
- Все таблицы, отсортированные по размеру (по убыванию):
python manage.py table_sizes
- Топ-20 самых больших таблиц:
python manage.py table_sizes --limit 20
- Таблицы по шаблону имени:
python manage.py table_sizes -p "fact__*"
- Несколько шаблонов:
python manage.py table_sizes -p "fact__*" -p "dim_*"
- Сортировка по имени:
python manage.py table_sizes --sort name
- Сортировка по дате модификации (старые сверху):
python manage.py table_sizes --sort date
- Инвертировать направление сортировки:
python manage.py table_sizes --sort date --desc
- Размер в гигабайтах:
python manage.py table_sizes --unit gb --limit 10
- Таблицы, не изменявшиеся с определённой даты:
python manage.py table_sizes --modified-lte 2025-12-20
- Таблицы за диапазон дат:
python manage.py table_sizes -p "fact__*" --modified-gte 2025-12-01 --modified-lte 2025-12-31
Параметры¶
| Параметр | Краткая форма | Описание | По умолчанию |
|---|---|---|---|
--pattern |
-p |
fnmatch-шаблон имени таблицы. Можно указать несколько раз. | все таблицы |
--sort |
-s |
Поле сортировки: size, name, date |
size |
--desc |
— | Инвертировать направление сортировки | выключен |
--unit |
-u |
Единица измерения: mb, gb |
mb |
--limit |
-l |
Ограничить количество таблиц в выводе | без ограничения |
--modified-gte |
— | Только таблицы, изменённые не ранее даты (YYYY-MM-DD) | — |
--modified-lte |
— | Только таблицы, изменённые не позднее даты (YYYY-MM-DD) | — |
Направление сортировки¶
Каждое поле имеет «естественное» направление. Флаг --desc инвертирует его:
--sort |
По умолчанию | С --desc |
|---|---|---|
size |
по убыванию (DESC) | по возрастанию (ASC) |
name |
по возрастанию (ASC) | по убыванию (DESC) |
date |
по возрастанию (ASC) | по убыванию (DESC) |
Использование (Python API)¶
Функция get_table_sizes доступна для вызова из Python-кода:
from planiqum.core.management.commands.table_sizes import get_table_sizes
Сигнатура¶
def get_table_sizes(
patterns: list[str] | None = None,
sort_by: str = "size",
reverse: bool | None = None,
limit: int | None = None,
modified_gte: str | datetime | None = None,
modified_lte: str | datetime | None = None,
) -> list[dict]:
Параметры¶
| Параметр | Тип | Описание |
|---|---|---|
patterns |
list[str] \| None |
Список fnmatch-шаблонов имён таблиц |
sort_by |
str |
Поле сортировки: "size", "name", "date" |
reverse |
bool \| None |
Направление: None — дефолтное, True — DESC, False — ASC |
limit |
int \| None |
Максимальное количество таблиц |
modified_gte |
str \| datetime \| None |
Фильтр: изменены не ранее (строка "YYYY-MM-DD" или datetime) |
modified_lte |
str \| datetime \| None |
Фильтр: изменены не позднее (строка "YYYY-MM-DD" или datetime) |
Возвращаемое значение¶
Список словарей с ключами:
| Ключ | Тип | Описание |
|---|---|---|
table_name |
str |
Имя таблицы |
total_bytes |
int |
Полный размер в байтах (данные + индексы) |
row_estimate |
int |
Оценка количества строк |
file_modified |
datetime \| None |
Дата последней модификации файла |
Примеры¶
from planiqum.core.management.commands.table_sizes import get_table_sizes
# Топ-5 таблиц fact__*
tables = get_table_sizes(patterns=["fact__*"], limit=5)
# Таблицы, не трогавшиеся с декабря 2025 (дата строкой)
old_tables = get_table_sizes(modified_lte="2025-12-31", sort_by="date")
# Явное управление направлением сортировки
tables = get_table_sizes(sort_by="size", reverse=False) # ASC — маленькие сверху
# Дата как datetime
from datetime import datetime
tables = get_table_sizes(modified_gte=datetime(2026, 1, 1))
Важные примечания¶
- Работает только с PostgreSQL.
- Количество строк (
row_estimate) — оценка изpg_stat_user_tables.n_live_tup. Обновляется послеANALYZE. Если показывает0— выполнитеANALYZE table_name. - Дата модификации (
file_modified) берётся изpg_stat_file— это дата последней модификации физического файла таблицы на диске. Для активных таблиц (частыеINSERT/UPDATE/VACUUM FULL) дата будет свежей. Для забытых бэкапов она приближённо соответствует дате создания. - Функция
pg_stat_fileтребует прав суперпользователя или ролиpg_read_server_files. - Размер включает данные таблицы, все индексы и TOAST-данные (
pg_total_relation_size).
Пример вывода¶
---------------------------------------------------------------------------------------------------
Table Size (MB) Rows (estimate) Modified
---------------------------------------------------------------------------------------------------
dim_product__basic_level_backup_ec5f5e96 54964.97 9,187,194 2026-02-19 11:48:23
fact__demand__sellin_plan 34343.27 0 2025-12-04 09:15:43
bench_main 22084.65 10,000,800 2026-02-24 11:40:38
---------------------------------------------------------------------------------------------------
TOTAL (3 tables) 111392.89 19,187,994
---------------------------------------------------------------------------------------------------