Добро пожаловать под кат, если вдруг вы пропустили какие-то из наших статей за прошедший год об интересных и полезных возможностях PostgreSQL, которые мы узнаем при разработке нашей системы полного цикла управления бизнесом СБИС — от кадрового учета, бухгалтерии, делопроизводства и налоговой отчетности, до таск-менеджмента, корпоративного портала и видеокоммуникаций.
Если не видели дайджест за первый год — время наверстать упущенное!
Анализ запросов в PostgreSQL
Как мы анализируем планы запросов, чтобы сделать их максимально быстрыми.
07.12 — One Tool to Analyze Them All (+18, ^13)
explain.tensor.ru поддерживает планы специфичных PostgreSQL-совместимых решений: Timescale, Citus, Greenplum и Redshift.
15.06 — Анализируем «слона» вместе с коллегами (+7, ^20)
Теперь на explain.tensor.ru можно пригласить коллегу-иностранца, оперативно поделившись ссылкой в мессенджере, — ведь теперь на английский переведен весь интерфейс, включая подсказки по оптимизации плана.
13.09 — Кластеризуем миллионы планов PostgreSQL (+9, ^44)
Некоторые подходы, которые позволяют нам сводить миллионы планов в сутки всего лишь в десятки объектов, которые надо анализировать.
SQL Antipatterns и оптимизация SQL
Как поправить наиболее частые ошибки разработчиков при работе с базой.
14.12 — скованные одной цепью EXISTS (+10, ^39)
Разные варианты, как можно оптимизировать запросы с несколькими EXISTS
.
13.07 — борем deadlock при пакетном UPDATE (+25, ^45)
Почему тривиальный запрос UPDATE tbl SET val = val + 1 WHERE id IN (1, 2, 3);
приводит к deadlock
, и как этого можно избежать.
17.08 — «слишком много золота» (+27, ^81)
Как получается, что между клиентским приложением и БД начинают летать мегабайты трафика: автогенерируемые запросы, INSERT
вместо COPY
, дублирующиеся параметры - все об этом.
24.08 — «где-то я тебя уже видел...» (+16, ^60)
Откуда в плане запроса возникают повторяющиеся блоки? LATERAL
поможет улучшить производительность!
SQL HowTo
Учимся писать нетривиальные SQL-запросы для решения прикладных задач.
17.12 — префиксный FTS-поиск с релевантностью по дате (+8, ^29)
Как можно быстро найти записи по ключевым словам, если пользователь хочет видеть результаты с сортировкой по дате.
11.01 — рейтинг-за-интервал (+13, ^54)
Учимся строить "топ" товаров (или продавцов) "за текущий месяц".
20.04 — решаем головоломку «Небоскрёбы» почти без перебора (+32, ^61)
Разрабатываем сложный SQL-запрос на примере решения простой логической игры.
08.09 — три WHERE в одном запросе (+8, ^48)
Почему это может пригодиться для базы мониторинга?
16.11 — делаем из мухи слона (алгоритм Ли) (+20, ^52)
Используем волновой алгоритм для классической задачи Льюиса Кэррола.
22.11 — генерируем лабиринты (алгоритм Прима и геометрические типы) (+33, ^52)
Планарный граф укладываем на плоскость, и пошагали.
DBA
О базе надо заботиться, и делать это предельно аккуратно.
18.01 — Ночной Дозор (+19, ^39)
Как оптимизировать многогигабайтные посуточные секции append-only данных.
12.02 — «Кто-то слишком много ест!» (+29, ^68)
Находим слишком "раздувшиеся" таблицы, которым не может помочь autovacuum.
24.03 — когда почти закончился serial (+40, ^73)
С минимальными блокировками превращаем int4-PK
в int8
, пока база еще не "встала".
05.04 — меняем «слонов» на переправе (+10, ^22)
Как мы мигрировали базу мониторинга между версиями PostreSQL с помощью FDW.
12.05 — прибираем «мертвые души» (+17, ^39)
Если серверу PG внезапно стало плохо, на диске могут остаться "хвосты". Найдем и зачистим их.
Решения для PostgreSQL
Как можно решить разные возникающие "в энтерпрайзе" бизнес-задачи.
25.01 — Агрегаты в БД — зачем, как, а стоит ли? (+13, ^48)
Как и почему иногда агрегаты стоит оставить в базе, а не вытаскивать "наружу".
28.01 — Агрегаты в БД — эффективная обработка потока «фактов» (+13, ^41)
Собираем входящие данные для агрегирования так, чтобы не "лечь" под нагрузкой.
03.02 — Агрегаты в БД — многомерные суперагрегаты (+14, ^31)
Строим агрегаты сразу для разных разрезов.
08.02 — Агрегаты в БД — прокси-таблицы (+12, ^48)
Как можно снизить суммарные задержки на вставку множества изменений в таблицы агрегатов за счет использования промежуточных таблиц и внешней обработки.
15.03 — Случайности не случайны (+19, ^32)
Можно ли достоверно предсказать будущее хоть на немного вперед? Иногда - вполне, надо только много везения... или немного знаний.
25.05 — Множественные источники данных в интерфейсе — client-side «SQL» (+10, ^18)
Как сделать быстрый индексный выбор данных из нескольких источников в общий таймлайн.
19.08 — КЛАДРируем адреса произвольной формы (ч.1 — импорт) (+9, ^31)
Эффективно импортируем адресный справочник в свою базу. КЛАДР умирает, но дело его живет!
02.09 — КЛАДРируем адреса произвольной формы (ч.2 — подстрочный поиск) (+7, ^39)
Учимся быстро подсказывать адреса с помощью "двухмерного" LIKE.
Дайджесты и обзоры
26.11 — PostgreSQL в «Тензоре» — публикации за год (+23, ^60)
Путеводитель по статьям первого года.
01.04 — Энтерпрайз-домино. 0x13 вредных советов для ниндзя-разработчика (+21, ^39)
"Выращиваем" архитектуру бизнес-приложения, отбиваясь от вражеских агентов, тыкающих во все слабые места.
26.04 — Чего «энтерпрайзу» в PostgreSQL не хватает (+31, ^75)
Чего, по нашему опыту использования PostgreSQL в "кровавом энтерпрайзе" "Тензора", не хватает в этой СУБД.