Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 199новых вакансий за сутки·93 838вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 222
  • Облачные технологии14 171
  • QA вакансии3 456
  • Backend вакансии2 114
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии997
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

DevOps и инфраструктура

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

Другие направления

  • Проджект-менеджер624
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 960
  • Junior вакансии6 708

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PostgreSQLВсе вопросы
PostgreSQLSeniorОпыт

Представьте, запросы к PostgreSQL резко замедлились после релиза или роста данных. Как вы будете искать причину?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Алгоритм: pg_stat_activity (активные запросы/локи) → pg_stat_statements (топ по total_exec_time) → EXPLAIN ANALYZE BUFFERS (план, кэш, spill) → ANALYZE/VACUUM (статистика/bloat) → iostat + bgwriter (диск/checkpoint).

Фаза 1: Установить факты за 5 минут

-- 1. Кто тормозит прямо сейчас?
SELECT pid, now() - query_start AS age, state,
       wait_event_type, wait_event, left(query, 200) AS q
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY age DESC LIMIT 20;

-- 2. Есть ли блокировки?
SELECT bl.pid AS blocked, a.query AS blocked_q,
       kl.pid AS blocker, ka.query AS blocker_q
FROM pg_blocking_pids(bl.pid) AS kl(pid)
JOIN pg_stat_activity bl ON bl.pid = ANY(pg_blocking_pids(bl.pid))
JOIN pg_stat_activity a  ON a.pid = bl.pid
JOIN pg_stat_activity ka ON ka.pid = kl.pid;

-- 3. Сколько соединений?
SELECT count(*), state FROM pg_stat_activity GROUP BY state;

Ответы на эти три вопроса сразу показывают: блок на локе → смотрим что держит лок; много idle in transaction → утечка незакрытых транзакций в приложении; max_connections исчерпан → нужен пуллер или срочная перезагрузка.

Расследование резкого замедления запросов в PostgreSQL

Резкое замедление после релиза или роста данных — разные сценарии, но подход один: сначала измеряем, потом выдвигаем гипотезы, не наоборот. Ниже — пошаговый playbook.

Фаза 2: Определить «плохие» запросы

-- Топ по total_exec_time (нужен pg_stat_statements)
SELECT queryid, calls, round(total_exec_time::numeric, 1) AS total_ms,
       round(mean_exec_time::numeric, 2) AS mean_ms,
       round(stddev_exec_time::numeric, 2) AS stddev_ms,
       left(query, 120) AS q
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 15;

-- Сравниваем mean_exec_time с историческими данными (Grafana / pgBadger)
-- Резкий рост среднего — план изменился или статистика устарела

Фаза 3: Проверить план конкретного запроса

EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT o.id, u.email, o.total
FROM orders o
JOIN users u ON u.id = o.user_id
WHERE o.status = 'pending'
ORDER BY o.created_at DESC
LIMIT 100;

Что смотреть в выводе:

  • Rows estimated vs actual: расхождение в 100x — устаревшая статистика, запустить ANALYZE.
  • Seq Scan на большой таблице: нет индекса или plannerне использует его (см. random_page_cost).
  • Buffers: shared read=huge: данные не в кэше, нагрузка на диск. Проверить shared_buffers и реальное потребление RAM.
  • Sort Method: external merge: work_mem не хватает, сортировка идёт через диск.
  • Hash Batches: >1: hash join сделал spill на диск из-за малого work_mem.

Фаза 4: Гипотезы по сценарию «после релиза»

  • Новый код добавил N+1 запросы: в pg_stat_statements появилось 10K calls/s запросов, которых раньше не было. Ищем по queryid или по query текстом.
  • Миграция взяла лок и держит его: долгая транзакция ALTER TABLE. Проверяем pg_locks + pg_stat_activity.
  • Новый запрос без индекса стал делать Seq Scan: в pg_stat_user_tables вырос seq_scan на нужной таблице.
  • Изменился параметр приложения: например, limit убрали → запрос возвращает 1M строк вместо 100.

Фаза 5: Гипотезы по сценарию «после роста данных»

  • Планировщик переключился с Index Scan на Seq Scan: при росте таблицы selectivity индекса упала, и планировщик решил что Seq дешевле. Решение: ANALYZE + проверить work_mem/random_page_cost.
  • Bloat: таблица выросла физически из-за удалений без vacuum. SELECT n_dead_tup FROM pg_stat_user_tables.
  • IOPS лимит в облаке: EBS gp2 burst balance исчерпан при росте объёма IO.
  • Checkpoint storm: при росте write-нагрузки checkpoint стал слишком частым. Проверить: SELECT * FROM pg_stat_bgwriter;, если checkpoints_req растёт — увеличить max_wal_size.

Фаза 6: Быстрые remediation

-- Устаревшая статистика
ANALYZE VERBOSE orders;

-- Убить зависшую транзакцию
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle in transaction'
  AND now() - state_change > interval '10 minutes';

-- Принудительный vacuum
VACUUM ANALYZE orders;

-- Если планировщик упорно выбирает Seq Scan (временный workaround)
SET enable_seqscan = off;  -- только для отладки, не в production постоянно

Инструменты мониторинга

  • pgBadger: анализ логов PostgreSQL, топ медленных запросов по времени.
  • pg_activity: htop-подобный real-time монитор запросов.
  • Grafana + postgres_exporter: метрики pg_stat_statements, pg_stat_bgwriter, pg_stat_replication в реальном времени.
  • auto_explain: автоматически логирует EXPLAIN для запросов дольше порога.
-- auto_explain в postgresql.conf
shared_preload_libraries = 'pg_stat_statements,auto_explain'
auto_explain.log_min_duration = '500ms'
auto_explain.log_analyze = on
auto_explain.log_buffers = on

Подводные камни

  • EXPLAIN ANALYZE выполняет запрос по-настоящему — для DELETE/UPDATE используйте BEGIN ... ROLLBACK, иначе изменения применятся.
  • pg_stat_statements.max по умолчанию 5000 — при большом количестве уникальных запросов старые вытесняются и история теряется.
  • Параметр work_mem глобальный, но умножается на количество параллельных sort/hash операций в запросе — осторожно при увеличении.
  • Bloat индексов не показывается в pg_stat_user_tables — нужен pgstattuple или регулярный REINDEX CONCURRENTLY.
  • После ANALYZE план может измениться и стать хуже в редких случаях — сохраняйте старый план через pg_hint_plan для отката.
  • checkpoint_completion_target по умолчанию 0.9 — хорошее значение; не снижайте его, это размажет I/O от checkpoint.
  • Рост числа соединений сам по себе деградирует PostgreSQL из-за lock manager overhead — держите активные соединения в пределах 2–4x CPU cores.
  • В replica-сценарии медленные запросы на replica могут быть вызваны replication lag — replica читает старые страницы, не успевающие примениться.

Частые вопросы на собеседовании

  • Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?
  • Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?
  • Что такое PITR и чем pg_dump отличается от base backup + WAL archive?
  • Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?

Что портит ответ

  • Сразу обвинять PostgreSQL, не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

Что слушает интервьюер

  • Умеет локализовать проблему вокруг PostgreSQL
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

Как вы знаете этот вопрос?

Проверить себя по теме PostgreSQL →

Связанные темы

PostgreSQLDebuggingtechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

PostgreSQL вакансии
  • Go Architect (Fintech)
  • Fullstack Developer (Java Core & React)
  • Sr Software Engineer - Remote
  • Sr Full Stack Developer-Web Technology
  • Principal Software Engineer (Application Software)