[Перевод] Как читать BUFFERS в EXPLAIN ANALYZE и находить I/O-узкие места в PostgreSQL

EXPLAIN ANALYZE часто воспринимается как инструмент, который показывает план выполнения запроса. Но если посмотреть внимательнее на блок BUFFERS, он начинает отвечать на более прикладной вопрос — где именно запрос упёрся в I/O и почему это произошло. В этой статье разберём, как читать эту статистику на уровне отдельных узлов плана, как интерпретировать hit/read в контексте нагрузки и почему сами числа почти ничего не значат без сравнения во времени.

https://habr.com/ru/companies/otus/articles/1024674/

#EXPLAIN_ANALYZE #postgres #sql #buffers #оптимизация_запросов #производительность_базы_данных #work_mem #shared_buffers

Как читать BUFFERS в EXPLAIN ANALYZE и находить I/O-узкие места в PostgreSQL

В статье о буферах в PostgreSQL мы добавляли EXPLAIN (ANALYZE, BUFFERS) почти к каждому запросу, особо не вчитываясь в его вывод. Пора это исправить. PostgreSQL показывает использование буферов для...

Хабр

Монолит с отчётами на 30 секунд: как я переписал архитектуру и что из этого вышло

Пришёл в проект, там легаси погоняет легаси. Спагетти такие что уже в рот лезут. Отчёты по филиалам открывались 30 секунд. Команда реально боялась нажать кнопку в рабочее время, а вдруг база ляжет. Это была система управления розничной сетью: несколько филиалов, сотни тысяч записей о заказах, ежедневные отчёты по выручке и остаткам. На бумаге ничего страшного. На практике монолит на Django где бизнес-логика размазана по контроллерам так, что поменяй что-то одно и сломается три другого. Первое, что я сделал: открыл EXPLAIN ANALYZE. Как отчёты ускорились в 20 раз

https://habr.com/ru/articles/1019516/

#django #postgresql #ddd #python #highload #оптимизация #explain_analyze #архитектура #n+1 #backend

Монолит с отчётами на 30 секунд: как я переписал архитектуру и что из этого вышло

Пришёл в проект, там легаси погоняет легаси. Спагетти такие что уже в рот лезут. Отчёты по филиалам открывались 30 секунд. Команда реально боялась нажать кнопку в рабочее время, а вдруг база ляжет....

Хабр

[Перевод] Как найти подозрительные логины из разных стран за 2 часа в PostgreSQL

В задачах на SQL особенно интересно то, что один и тот же результат часто можно получить несколькими способами – и разница между ними оказывается не только в красоте запроса, но и в его поведении на реальных данных. В этой статье – разбор прикладной задачи про поиск подозрительных логинов из разных стран в пределах двух часов: с вариантом через self join, альтернативой на оконных функциях и сравнением планов выполнения в PostgreSQL. Разбор запроса

https://habr.com/ru/companies/otus/articles/1014814/

#postgresql #SQL #оконные_функции #поиск_аномалий #безопасность_аккаунтов #анализ_сессий #временные_окна #оптимизация_запросов #EXPLAIN_ANALYZE

Как найти подозрительные логины из разных стран за 2 часа в PostgreSQL

Материал подготовлен в рамках нового потока курса «SQL для разработчиков и аналитиков» . Недавно я увидел пост про набор запросов для собеседований, и все они были посвящены ответам задачи из...

Хабр

Как один индекс на created_at сократил время ответа API с 12 секунд до 40 мс

«Страница заказов грузится вечность», — такой тикет прилетел в понедельник утром. На проде 800 тысяч записей, а типичный запрос с фильтрацией и сортировкой заставлял менеджеров ждать по 12 секунд. В этой статье разберем, почему стандартный индекс по одному полю не сработал, как EXPLAIN ANALYZE помог найти «бутылочное горлышко» и почему порядок полей в составном индексе имеет решающее значение

https://habr.com/ru/articles/990398/

#PostgreSQL #Django #оптимизация_SQL #индексы #составной_индекс #EXPLAIN_ANALYZE #производительность_БД #backendразработка

Как один индекс на created_at сократил время ответа API с 12 секунд до 40 мс

Неделю назад прилетел тикет: «Страница заказов грузится вечность». Открыл — действительно, 12 секунд на первую загрузку. На проде. С реальными пользователями. Спойлер: проблема была в том месте, куда...

Хабр

PostgreSQL и 1С: как построить систему поиска «тихих убийц» производительности

Стандартный мониторинг часто пропускает «тихих убийц» — запросы, которые по отдельности кажутся нормальными, но в сумме создают аномальную нагрузку на СУБД. В итоге система живет в хрупкой идиллии до первого аврала. В статье — описание универсального способа контроля качества кода и нагрузки на базу без выделенного DBA. Пошагово разберем поиск неоптимальных запросов с помощью pgBadger на живом кейсе.

https://habr.com/ru/articles/986306/

#PostgreSQL #1C #pgBadger #оптимизация #производительность #SQL #индексы #explain_analyze #sequential_scan #администрирование_бд

PostgreSQL и 1С: как построить систему поиска «тихих убийц» производительности

Эта статья — не академическое исследование внутреннего устройства СУБД, а описание  универсального инженерного подхода  к контролю качества кода и нагрузки на базу....

Хабр

Как я распилил 1,1 ТБ default-партиции и не уронил прод

Мы забыли вовремя создать партиции, и все новые данные полетели в events_default_partition . Default дорос до ~1.1 ТБ, а простое «ATTACH PARTITION» требовало часов сканирования и долгой блокировки. В статье — почему «быстрые» рецепты оказываются медленными, как я перенёс данные в нужные диапазоны, и как мы уложили критическую блокировку в 44 с . Default-партиция — это не озеро Байкал. Если туда всё сливать, экосистема потом мстит. 44 секунды блокировки: план операции

https://habr.com/ru/articles/977528/

#партиционирование_PostgreSQL #ATTACH_PARTITION #plpgsql #автоматизация_обслуживания_БД #explain_analyze #downtime #advisory_lock #CHECK_constraint #partitioning #database_migrations

Как я распилил 1,1 ТБ default-партиции и не уронил прод

Мы забыли вовремя создать партиции, и все новые данные полетели в events_default_partition . Default дорос до ~1.1 ТБ, а простое «ATTACH PARTITION» требовало часов сканирования и долгой блокировки. В...

Хабр

Правильный порядок колонок в B-tree индексах PostgreSQL или правило ESR

Когда в проекте используется составной B-tree индекс, важно не просто "создать индекс", а сделать это правильно — иначе запросы могут не только не ускориться, но и начать работать медленнее. Возникает логичный вопрос: как выбрать порядок колонок, чтобы индекс действительно работал эффективно? Брутфорсом? По интуиции? По селективности? В этой статье я расскажу, как подходить к построению составных индексов в PostgreSQL, на что реально влияет порядок колонок. Также разберём простое правило ESR, которое помогает упростить выбор и получать стабильный прирост производительности на всех стендах.

https://habr.com/ru/articles/911688/

#postgresql #Btree #составной_индекс #многоколонковый_индекс #ESR_правило #оптимизация_запросов #селективность #план_выполнения #explain_analyze #индексный_скан

Правильный порядок колонок в B-tree индексах PostgreSQL или правило ESR

Когда в проекте используется составной B-tree индекс, важно не просто "создать индекс", а сделать это правильно — иначе запросы могут не только не ускориться, но и начать работать медленнее. Возникает...

Хабр