Обновить
140.94

PostgreSQL *

Свободная объектно-реляционная СУБД

Сначала показывать
Порог рейтинга
Уровень сложности

Автоматическое масштабирование БД в Kubernetes для MongoDB, MySQL и PostgreSQL

Время на прочтение7 мин
Охват и читатели6.8K

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

Это перевод статьи Дмитрия Костика и Миколы Моржан из Percona. С их помощью посмотрим, в какой степени можно автоматизировать горизонтальное масштабирование баз данных MongoDB, MySQL и PostgreSQL в Kubernetes и как это сделать?

Читать далее

Постгрессо №4 (41)

Время на прочтение10 мин
Охват и читатели5.6K

ИТ-инфраструктура — это как водопровод, без неё жизнь уже почти невозможна. И в эти безрадостные дни мы продолжаем выпускать Postgresso.


PostgreSQL 14.3

Вышла версия 14.3 (release notes), и обновлены предыдущие ветки: 13.7, 12.11, 11.16, и 10.21 (объявлено, что ветвь PostgreSQL 10 не будет обновляться с 10-го ноября 2022-го).

В версии много исправлений, отметим два. Александр Лахин из Postgres Professional обратил внимание на лазейку:

В случае, когда привилегированный пользователь работает с объектами другого пользователя, команды REINDEX, CREATE INDEX, REFRESH MATERIALIZED VIEW и CLUSTER отрабатывали недостаточно безопасно. Это же относится и к autovacuum, и pg_amcheck. Они активировали релевантную защиту (заключали процессы в песочницу операций, ограниченных соображениями безопасности — «security restricted operation» sandbox) или слишком поздно, или вообще не активировали её. Если у атакующего были привилегии создавать не временные объекты хотя бы в одной схеме, он мог запустить под суперпользователем зловредные SQL-функции.

Похожая проблема, но с конструкциями DECLARE CURSOR… WITH HOLD и вызовом отложенных триггеров в выражениях индексов и запросов матпредставлений была замечена и ликвидирована ещё в PostgreSQL 12. Новый баг поправлен во всех версиях PostgreSQL от 10 до 14.
Читать дальше →

Я написал серверную SQLite

Время на прочтение9 мин
Охват и читатели14K

Меня зовут Бен Джонсон, и я написал встраиваемую базу данных, которая служит бэкендом систем вроде etcd, — это BoltDB. Сегодня я работаю над Open Source проектом Litestream в компании Fly.io. Благодаря репликации Litestream делает SQLite приемлемым для фулстек‐приложений. Если вы можете установить SQLite, то Litestream заставите работать за 10 минут.

Читать далее

PostgreSQL Antipatterns: когда мешает внешний ключ

Время на прочтение5 мин
Охват и читатели24K

Внешние ключи (foreign keys) - мощный и удобный механизм контроля логической целостности данных в базе. Но он бывает не только лишь полезен, и может неплохо пригрузить вашу БД.

Внимательный взгляд на план запроса поможет избежать многих проблем - как при чтении из базы, так и при вставке в нее.

Читать далее

Кластер Postgres для 1С. Повествование об интеллектуальных скитаниях инженера со счастливым концом

Время на прочтение11 мин
Охват и читатели18K

Как и у многих, в нашей компании возник вопрос импортозамещения. В целом вопрос понятный, много раз обсужденный со всех точек зрения. И вот настал счастливый момент, когда слова трансформировались в конкретные задачи с конкретными сроками. И одна из них была о замене СУБД для 1С.

Ну и конечно же, первым делом был поднят вопрос о кластеризации этой истории. Никто подвоха особого не ожидал, ибо у нас есть уже зарекомендовавшее себя решение в виде связки pg_auto_failover версии 1.6 от Citus (далее PGAF для краткости) и keepalived. Это решение нас целиком и полностью устраивает, поэтому выбор наш был очевиден.

Но когда мы начали настраивать выяснился очень неприятный момент - обычная сборка PGAF просто не работает с версией СУБД от PostgresPro - все ломается из-за жестко прописанных зависимостей. Тут то и началось "веселье".

Был вариант игнорировать зависимости, но в таком случае мы получаем проблемы при обновлении. В итоге нашли альтернативу - собрать из исходников самим, настраивая пути и зависимости самостоятельно, о чем и расскажу. В моем повествовании нет какой-то особой магии, но пару дней сберечь точно поможет.

Читать далее

PostgreSQL Antipatterns: в этом плане кто-то лишний

Время на прочтение3 мин
Охват и читатели8K

Сегодня будет рассказ про избыточные группировки и сортировки в SQL-запросах - как они возникают, по каким признакам их можно потом вычислить и как избавиться от них.

Читать далее

Миграция с Oracle на PostgreSQL: зачем, как и что для этого нужно

Время на прочтение8 мин
Охват и читатели18K

Привет, Хабр! Меня зовут Иван Чувашов, я сертифицированный администратор PostgreSQL с 13-летним опытом работы с БД. Хочу поговорить на весьма актуальную в последнее время тему — о миграции на PostgreSQL с Oracle. Расскажу, зачем вообще тратить время и деньги на миграцию, какие для этого понадобятся компетенции, какие есть варианты миграции, как этот процесс можно организовать и избежать типичных ошибок.

Читать дальше

Мгновенные снепшоты postgres на tablespace и btrfs

Время на прочтение4 мин
Охват и читатели9.3K

Для работы бывает полезно иметь несколько копий одной реальной базы для экспериментов, фикстур или просто тестовых приложений. База растет и время копирования через разворачивание дампа или с помощью шаблона также возрастает до утомительных величин. Для решения этого кейса уже описаны варианты использования файловой системы с поддержкой CoW - Btrfs. В интернете находил  такие инструкции, они сводятся к тому, что делается снепшот всего сервера. И для работы второго "скопированного" нужно перегенерировать pid и сменить порт для предотвращения конфликтов. Этот способ довольно универсальный относительно конфигурации баз на сервере, но кажется имеет ограничение для неопределенного кол-ва параллельных снепшотов серверов.

В этой статье предлагаю свой вариант реализации снепшотов на одном экземпляре сервера postgres и одной базы, на произвольное кол-во копий.

Инструкция linux only, про поддержку CoW файловых систем на Windows не в курсе.

Читать далее

Псс, парень… индекс нужен?

Время на прочтение8 мин
Охват и читатели28K

Самый больной вопрос для любого разработчика, которому приходится вычитывать данные из базы: "Как сделать мой запрос быстрее?". Классический ответ - необходимо создать подходящий индекс. Но куда именно его стоит "накатывать", да и как вообще он должен выглядеть?..

Мы научили наш сервис визуализации планов PostgreSQL отвечать на эти вопросы, и под катом расскажем, чем именно он руководствуется в своих рекомендациях.

Читать далее

Как работает оптимизатор PostgreSQL при большом количестве таблиц в запросе

Время на прочтение9 мин
Охват и читатели26K
SQL — это декларативный язык программирования, используемый для создания и манипулирования объектами в реляционных СУБД. Этот язык описывает что должно быть получено, но не описывает как это получить. Программист пишет запрос и (чаще всего) хочет получить результат от СУБД максимально быстро.

Работу по нахождению самого лучшего способа получения требуемых данных выполняет планировщик (он же оптимизатор) запросов. Он выбирает способы соединения наборов строк и их обработки, строит различные планы выполнения запроса и находит среди них наилучший, для чего используется стоимостная модель оптимизации.

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

Для демонстрации работы оптимизатора практически во всех наших (и чужих) примерах на эту тему используются довольно скромные параметры: две-три таблицы, пара JOIN-ов, миллисекунды на выполнение запросов. А что будет, если загрузить оптимизатор десятками таблиц за раз? Как разные конфигурационные параметры влияют на производительность запросов с сотней JOIN-ов? И переживет ли это среднестатистический рабочий ноутбук? Ответы на эти вопросы — со схемами и графиками — вы найдете под катом!
Читать дальше →

Postgresso #3 (40)

Время на прочтение6 мин
Охват и читатели5.8K


ИТ-инфраструктура — это как водопровод, без неё жизнь уже почти невозможна. И в эти безрадостные дни мы продолжаем выпускать Postgresso.


Feature Freeze


7 апреля произошла Заморозка функциональности. Вошедших новшеств много. Традиционный обзор Павла Лузанова выйдет немного позже.


Главными достижениями недавнего времени стали 2 серии мощных патчей, добавляющие важную функциональность и ещё плотней приближающие к стандартам SQL — SQL/JSON и MERGE.

SQL/JSON


Вот два поста в ЖЖ Олега Бартунова:

SQL/JSON standard-2016 conformance for PostgreSQL, Oracle, SQL Server and MySQL

SQL/JSON in PG15 !


Скрин стандартов из статьи Олега Бартунова

Между этими двумя постами три года. В первом он обозначил 3 большие серии патчей, связанных со стандартом SQL/JSON. Во втором — недавние коммиты. Судьба патчей такова:

SQL/JSON: jsonpath (закоммичено на коммитфесте 2019-03)
SQL/JSON: functions (закоммичено на коммитфесте 2022-03)
SQL/JSON: JSON_TABLE (закоммичено на коммитфесте 2022-03)
Читать дальше →

«Импортозамещаем» анализ планов PostgreSQL

Время на прочтение4 мин
Охват и читатели13K

Вчера Hubert 'depesz' Lubaczewski закрыл доступ с российских IP ко всем своим сайтам, включая широко известный визуализатор планов PostgreSQL-запросов explain.depesz.com.

Но это не беда, потому что в компании "Тензор" мы разработали сервис explain.tensor.ru, функционал которого гораздо обширнее, и которым можете воспользоваться и вы.

Читать далее

Как мы ускорили выполнение запросов PostgreSQL в 100 раз

Время на прочтение10 мин
Охват и читатели56K

Существует великое множество статей об оптимизации PostgreSQL — эта «кроличья нора» весьма глубока. Когда несколько лет назад я начал разрабатывать бэкэнд аналитического сервиса, у меня уже был опыт работы с другими СУБД, такими как MySQL и SQL Server. Тем не менее, раньше мне не приходилось так фокусироваться на производительности. В прошлых проектах, над которыми я работал, либо не было жестких требований к времени обработки (DS/ML), либо не требовалось обрабатывать много строк одновременно (обыкновенные веб-приложения). Однако в этот раз мои запросы:

состояли из 3-10 JOIN-ов по коррелирующим запросам;

уielded от 10 до 1,000,000 строк;

должны были выполняться в течение времени, определенного UX-ом;

не могли быть hinted — пока Cloud SQL, управляемый PostgreSQL в Google Cloud, не стал поддерживать pg_hint_plan в конце 2021 года;

запрещали прямой доступ к серверному процессу, чтобы, например, хакнуть некоторые perf — потому что PostgreSQL был managed.

Получение целого миллиона строк в одном API endpoint сигнализирует о проблеме в алгоритме или архитектуре. Конечно, все можно переписать и перепроектировать, но за это нужно платить.

У нас не нашлось «заклинания», которое решило бы все проблемы с производительностью SQL. Тем не менее, я упомяну здесь несколько дельных предложений, которые помогли нам и, надеюсь, смогут помочь читателю. Разумеется, это не какие-то сакральные знания. Но когда мы начинали оптимизацию, я был бы рад их прочитать или услышать.

Читать далее

Ближайшие события

Правила перезаписи PostgreSQL

Время на прочтение7 мин
Охват и читатели15K

Представления (Views) — это не совсем то, о чём вы можете подумать. В этой статье мы разберём правила перезаписи PostgreSQL, как они работают, что они могут и чего не могут делать.

Начиная с версии 10, PostgreSQL поддерживает концепцию правил перезаписи, которые позволяют изменять способ выполнения запросов.

Фактически правила перезаписи — это то, как представления реализованы в PostgreSQL. Когда вы обращаетесь к представлению, ваш запрос фактически переписывается в соответствии с правилом, которое было создано при создании представления. По сути, представление — это, как мы сейчас увидим, правило перезаписи.

Однако не стоит расслабляться — некоторые условности всё же есть. Например, эти правила перезаписи сильно отличаются от плагинов перезаписи MySQL и в целом являются более комплексными.
Читать дальше →

Что нового в плане мониторинга в PostgreSQL (Алексей Лесовский)

Время на прочтение22 мин
Охват и читатели9.2K


Доклад Алексея Лесовского про то, что нового есть в PostgreSQL в плане мониторинга.


Охватывать Алексей будет 13 и 14 версии. Далее от его лица.

Читать дальше →

SQL HowTo: разные варианты работы с EAV

Время на прочтение3 мин
Охват и читатели33K

Соблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно - создать "универсальный" способ описания характеристик объектов, который больше не потребует доработок базы ни при появлении новых типов объектов, ни при возникновении новых атрибутов...

Однако, за любую универсальность приходится платить сложностью и производительностью запросов - так что json[b] может оказаться более эффективной заменой. Но если уж такая модификация невозможна - давайте попробуем выжать максимум производительности из доставшегося нам legacy на самом простом примере.

Читать далее

Когда помогает партиционирование, пример в PostgreSQL

Время на прочтение10 мин
Охват и читатели22K
Разберем внедрение партиционирования на практическом примере, обсудим выбор реализации, альтернативы. Учтем ограничения, проистекающие из самих обрабатываемых данных.

Подробнее

Отчёт с митапа: PostgreSQL-as-Service — можем, умеем, практикуем

Время на прочтение1 мин
Охват и читатели5.6K

Выкладываем запись с Ozon Tech PostgreSQL Meetup. Ранее я уже описывал нашу инфраструктуру: весь PostgreSQL основан на виртуальных машинах — 2К в тестовой среде и ~8К в проде. Это около 2К кластеров баз данных. Так как у нас микросервисная архитектура, мы придерживаемся принципа 1 сервис = 1 база. Нагрузка на базы может быть приличная: 2-2,5 млн транзакций в секунду, а WAL-трафик порядка 1.5 ГБ/c. 

Рассказали, как наша команда управляет всей этой инфраструктурой, как пришли к парадигме выдачи базы по кнопке и как воплотили её в жизнь. 

Видео и слайды под катом

Postgresso #2 за 2022 (39)

Время на прочтение11 мин
Охват и читатели7.3K


В эти безрадостные дни многим трудно работать, сочинять и даже читать статьи. Но ИТ-инфраструктура это как водопровод — без неё жизнь уже почти невозможна. И мы продолжаем выпускать Postgresso. По понятным причинам в этом выпуске будет много ссылок, меньше анализа. И главная тема — миграция

Миграция


Проблемы миграции с Oracle на Postgres обычно начинаются там, где приходится иметь дело с различиями в синтаксисе команд и прочими расхождениями в этих СУБД. Об этом и говорится в большинстве статей и видео.

Начнём с Oracle to Postgres Conversion

Это официальный документ сообщества PostgreSQL. Есть список инструментов миграции.

The Complete Oracle to PostgreSQL Migration Guide: Move and convert Schema, Application & Data

Довольно пространное руководство от EDB. Есть матрица возможностей миграционных инструментов.
Читать дальше →

Чем Linux HugePages важны для серверов баз данных?

Время на прочтение7 мин
Охват и читатели27K

Часто пользователи рассказывают о сбое базы данных по вине Out Of Memory Killer. Он завершает процессы PostgreSQL и остается причиной большинства отказов этой БД. Память на хост-компьютере может закончиться по нескольким причинам. Наиболее распространены из них четыре. Во-первых, может быть плохо настроена память на хост-компьютере. Во-вторых, могут быть ограничения глобальной переменной work_mem. Например, если у вас 32Гб RAM и work_mem=1Гб, то больше 32 соединений вы никогда не запустите. Каждое соединение PostgreSQL будет выделять этот размер памяти.

Третьей причиной будет большое количество подключений. Даже неактивное соединение может занимать значительный объем памяти. И наконец, другие программы тоже потребляют ресурсы, потому что для каждой из них этот компьютер является хостом.

Представляем вам перевод статьи от Jobin Augustine, который работает в Percona старшим инженером службы поддержки. Более 20-лет он был консультантом, архитектором, администратором и инструктором по PostgreSQL, Oracle и другим технологиям баз данных. Сегодня поговорим о том, как можно защититься от OOM с помощью HugePages и разберем насколько они важны и почему нужны.

Читать далее

Вклад авторов