Под занавес уходящего года предлагаю традиционно вспомнить, про какие интересные возможности и особенности работы с PostgreSQL мы рассказали в нашем блоге.
Если не видели дайджест за прошлый год — время наверстать упущенное!
Анализ запросов в PostgreSQL
Как мы анализируем планы запросов, чтобы сделать их максимально быстрыми.
Мы можем предложить наш комплекс по мониторингу серверов PostgreSQL, анализу запросов и визуализации их планов как для корпоративного использования на ваших мощностях, так и для интеграции в ваши системы управления - пишите на kilor@tensor.ru.
01.11 — PostgreSQL, что в логе твоем? (+29, *67)
В демо-режиме комплексного анализа логов PostgreSQL, вы можете загрузить лог своего сервера и наглядно увидеть, чем он у вас занимается.
20.07 — Self-hosted EXPLAIN: наглядно и безопасно (+32, *53)
Теперь вы можете развернуть наш визуализатор планов explain.tensor.ru на собственной площадке и больше не переживать о вопросах безопасности.
26.04 — Псс, парень… индекс нужен? (+22, *120)
Как с помощью explain.tensor.ru по плану запроса легко понять, каких именно индексов не хватает базе и почему.
13.04 — «Импортозамещаем» анализ планов PostgreSQL (+40, *63)
В связи с "самоизоляцией" explain.depesz.com от RU-пользователей рекомендуем использовать для анализа планов запросов PostgreSQL сервис explain.tensor.ru.
SQL Antipatterns и оптимизация SQL
Как поправить наиболее частые ошибки разработчиков при работе с базой.
01.12 — простой(?) INSERT… VALUES (+35, *64)
Как больно наступить на грабли в совсем простом, казалось бы, запросе? Допустим, у вас есть табличка статистики, куда вы периодически скидываете таймстамп последнего "текущего" состояния в паре координат - например, (ID организации, ID сотрудника)
...
29.07 — где скаляру в GiST место? (+10, *35)
Куда поставить идентификатор сегмента, если интервалы надо искать с ограничением по нему - до интервала или после?
07.07 — куда крутить NULLS (+21, *37)
NULLS FIRST
или NULLS LAST
- когда как правильно?
11.05 — когда мешает внешний ключ (+24, *73)
При использовании foreign keys можно легко хлебнуть горя, если не позаботиться о правильных индексах.
05.05 — в этом плане кто-то лишний (+10, *38)
Когда в запросе возникают избыточные сортировки и агрегации - это не здорово.
14.02 — рекурсивные грабли на ровном месте, или Сказка о потерянном времени (+17, *45)
Простое добавление даже неиспользуемой рекурсии в запрос может внезапно затормозить его в сотни раз.
31.01 — делаем группировку быстрее от 0.1 до 5 раз (+13, *73)
Не все группировки одинаково полезны - иногда в результате нескольких оптимизаций запрос может стать... медленнее!
SQL HowTo
Учимся писать нетривиальные SQL-запросы для решения прикладных задач.
13.07 — наперегонки со временем (+11, *70)
Как за ограниченное время выполнения заставить запрос вернуть хоть какую-то полезную информацию.
29.06 — обход дерева иерархии «по курсору» через двойную рекурсию (+15, *70)
Как можно обходить иерархию в стиле "бесконечного списка".
30.05 — «Ленивый сахар» PostgreSQL (+42, *151)
"Синтаксический сахар" некоторых языковых конструкций PostgreSQL позволяет не только писать меньше кода, но и добиться, что ваша база будет делать часть вычислений "лениво", только при фактической необходимости.
29.03 — разные варианты работы с EAV (+22, *52)
Модель Entity-Attribute-Value удобна для разработчика, но не для базы. Если поменять ее невозможно, то можно хотя бы выжать из нее максимум производительности.
11.02 — «простое» прогнозирование (+15, *60)
Как на основе данных за предыдущие периоды построить адекватный прогноз.
19.01 — считаем «уников» на интервале (+10, *39)
Для систем управления бизнесом часто приходится решать очень похожий класс задач по вычислению количества уникальных объектов на произвольном временном интервале.
DBA
О базе надо заботиться, и делать это предельно аккуратно.
08.12 — хранение списков — таблица, массив, строка? (+14, *46)
Мини-холивар на тему эффективного хранения небольших списковых структур.
17.01 — Реверс-инжинирим структуру БД PostgreSQL по плану запроса к ней (+16, *50)
Как по плану запроса восстановить схему БД с помощью explain.tensor.ru.