0Pricing
SQL Academy · Урок

Планирование ёмкости и аудит раздувания

Прогнозируйте рост дискового пространства и IOPS, регулярно проверяйте раздувание таблиц и индексов и планируйте обновления до того, как закончится место

«Планирование ёмкости и аудит раздувания» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Что прогнозировать

Чтобы рассчитать размер базы данных на следующие 6–12 месяцев, спрогнозируйте:

  • Использование диска (данные + WAL + индексы)
  • Потребность в IOPS
  • Рабочий набор в RAM
  • Количество соединений

Рост дискового пространства

Отслеживайте недавнюю динамику роста:

SELECT pg_size_pretty(pg_database_size(current_database()));
SELECT pg_size_pretty(pg_total_relation_size(t.oid)) AS total,
       relname
FROM pg_class t
WHERE relkind = 'r'
ORDER BY pg_total_relation_size(t.oid) DESC LIMIT 20;

Отслеживание роста таблиц

Запланируйте задачу журналирования метрик и построьте по ним график:

INSERT INTO size_history (ts, tablename, size_bytes)
SELECT NOW(), relname, pg_total_relation_size(oid)
FROM pg_class WHERE relkind = 'r';

Оценка IOPS

Таблицы с высокой нагрузкой на чтение видны в pg_stat_user_tables:

SELECT relname, seq_tup_read, idx_tup_fetch,
       seq_tup_read + idx_tup_fetch AS total_reads
FROM pg_stat_user_tables
ORDER BY total_reads DESC LIMIT 20;

Расчёт объёма RAM

shared_buffers ≈ 25% RAM. effective_cache_size ≈ 75% (подсказка планировщику, а не выделение памяти). work_mem на одно соединение × количество соединений не должно превышать доступный объём RAM.

Аудит раздувания

Найдите таблицы с наибольшим числом мёртвых строк:

SELECT relname,
       n_live_tup,
       n_dead_tup,
       round(n_dead_tup::numeric / NULLIF(n_live_tup, 0), 2) AS dead_ratio,
       last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;

Раздувание индексов

Используйте pgstattuple или встроенные инструменты:

CREATE EXTENSION pgstattuple;

SELECT relname,
       pg_size_pretty(pg_relation_size(indexrelid)) AS size,
       (pgstatindex(indexrelid::regclass)).leaf_fragmentation
FROM pg_stat_user_indexes
ORDER BY pg_relation_size(indexrelid) DESC LIMIT 20;

Неиспользуемые индексы

Найдите и удалите их — они увеличивают нагрузку на запись:

SELECT schemaname, relname, indexrelname,
       pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE idx_scan = 0
  AND indexrelname NOT LIKE '%_pkey'
ORDER BY pg_relation_size(indexrelid) DESC;

Аудит соединений

Сколько клиентов подключено и в каком они состоянии:

SELECT datname, usename, application_name, state, COUNT(*)
FROM pg_stat_activity
GROUP BY 1,2,3,4 ORDER BY 5 DESC;

Долгие транзакции

Причина голодания процесса очистки:

SELECT pid, state, xact_start, NOW() - xact_start AS xact_age, query
FROM pg_stat_activity
WHERE xact_start IS NOT NULL
ORDER BY xact_age DESC NULLS LAST LIMIT 20;

WAL и архивы

Отслеживайте скорость генерации WAL, чтобы рассчитать объём архивного хранилища:

SELECT pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0')) AS total_wal_generated;

Планирование переключения при отказе

Диск реплики должен быть такого же размера, как диск основного сервера. Убедитесь, что скорость синхронизации реплики не ниже скорости записи на основном сервере.

Итоги

Планирование ресурсов — это построение графиков для правильных метрик.

  • Рост размера отдельных таблиц
  • Доля мёртвых строк
  • Неиспользуемые индексы
  • Долгие транзакции, блокирующие очистку
  • Количество соединений

Быстрая проверка

Какое представление следует запросить, чтобы найти таблицы с наибольшим числом мёртвых строк для планирования очистки?

Часто задаваемые вопросы

Урок «Планирование ёмкости и аудит раздувания» бесплатный?

Да — полный текст урока «Планирование ёмкости и аудит раздувания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Планирование ёмкости и аудит раздувания»?

Прогнозируйте рост дискового пространства и IOPS, регулярно проверяйте раздувание таблиц и индексов и планируйте обновления до того, как закончится место Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Планирование ёмкости и аудит раздувания»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. pg_stat_statements: самые ресурсоёмкие запросы
  2. pgBadger для анализа журналов
  3. Пулинг соединений: PgBouncer
  4. Планирование ёмкости и аудит раздувания
← Назад к SQL Academy