linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/lessons/pg-lab-25-1-cost-model

lesson ── postgres-labs ── ~22 мин ── 4 шагов

Воспроизведи стоимость Seq Scan вручную

Стоимость - не магия, а арифметика. Достанем relpages и reltuples, посчитаем стоимость Seq Scan по формуле и сверим с EXPLAIN до сотых. Запусти psql во вкладке client.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Проверь параметры стоимости

    sql
    SHOW seq_page_cost;    -- 1.0
    SHOW cpu_tuple_cost;   -- 0.01

    Это валюта планировщика: чтение страницы подряд = 1.0, обработка строки = 0.01.

    подсказка

    За единицу взято последовательное чтение одной страницы.

    ✓ seq_page_cost = 1.0, как и ожидалось.

  2. 02

    Узнай размеры таблицы

    Обнови статистику и достань размеры:

    sql
    ANALYZE tickets;
    SELECT relpages, reltuples FROM pg_class WHERE relname = 'tickets';

    Это число страниц и строк, на которые опирается формула.

    подсказка

    relpages/reltuples обновляются при ANALYZE и VACUUM.

    ✓ Размеры известны: relpages и reltuples заполнены.

  3. 03

    Посчитай и сверь

    Посчитай руками: relpages * 1.0 + reltuples * 0.01. Запиши число. Затем:

    sql
    EXPLAIN SELECT * FROM tickets;

    Второе число в cost=0.00..ЧИСЛО - твой результат. Совпало?

    подсказка

    total cost = relpages × seq_page_cost + reltuples × cpu_tuple_cost.

    ✓ Seq Scan, и его total cost равен твоему расчёту.

  4. 04

    Посмотри startup у сортировки

    sql
    EXPLAIN SELECT * FROM tickets ORDER BY ticket_no;
    EXPLAIN SELECT * FROM tickets ORDER BY ticket_no LIMIT 5;

    У узла Sort большой startup cost: чтобы отдать первую строку, надо отсортировать всё. С LIMIT планировщик смотрит на стоимость первых строк - и план может измениться.

    подсказка

    startup cost - работа до первой строки; у Sort он большой.

    ✓ Виден большой startup у Sort - вот цена сортировки до первой строки.

Что ты узнал

Стоимость - условные единицы (чтение страницы подряд = 1.0). Seq Scan стоит relpages × seq_page_cost + reltuples × cpu_tuple_cost; результат сверяется с EXPLAIN до сотых. У каждого узла startup (до первой строки) и total (до всех) cost; LIMIT смещает выбор в пользу малого startup.

команды

  • SELECT relpages, reltuples FROM pg_class WHERE relname='t';размеры для формулы
  • EXPLAIN SELECT * FROM t;сверить total cost с расчётом

концепции

  • · стоимость - условные единицы относительно чтения страницы (1.0)
  • · Seq Scan = relpages × seq_page_cost + reltuples × cpu_tuple_cost
  • · startup cost - до первой строки, total - до всех
  • · LIMIT меняет план, делая важной стоимость первых строк

← предыдущая

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

следующая →

Предскажи селективность и почини корреляцию

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки