Skip to content

Настройка производительности в PostgreSQL 17: Понимание параметров стоимости оптимизатора

Пересказ статьи Jeyaram Ayyalusamy. 32 - PostgreSQL 17 Performance Tuning: Understanding Optimizer Cost Parameters


PostgreSQL известна как одна из наиболее продвинутых реляционных баз данных с открытыми кодами, и одна из основных причин ее силы - оптимизатор запросов на основе стоимости.

Когда вы запускаете запрос, оптимизатор не выполняет его непосредственно. Он генерирует множество возможных планов выполнения и оценивает их стоимость. Выбирается план с самой низкой оценкой стоимости. Стоимость не измеряется в миллисекундах или циклах ЦП - она представляет собой абстрактные единицы, которые PostgreSQL использует для сравнения.

Понимание этих параметров стоимости в PostgreSQL является существенным для настройки производительности, особенно тогда, когда дело касается больших таблиц и сложных запросов.

В этой статье мы:

  1. Создадим таблицу с 10 миллионами строк для имитации реальной рабочей нагрузки.

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

  3. Подробно разберем модель стоимости в PostgreSQL.

  4. Покажем, как настройка параметров стоимости может изменить решение при выборе плана.

Продолжить чтение "Настройка производительности в PostgreSQL 17: Понимание параметров стоимости оптимизатора"

Новости за 2026-03-21 - 2026-03-27

§ Новая задача от pegoopik опубликована на обучающем этапе под номером 193 (оценка сложности 2 балла).


§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
27 (DML) 7 4
89 (SELECT) 3 6
24 (DML) 2 6
138 (SELECT) 2 5
Продолжить чтение "Новости за 2026-03-21 - 2026-03-27"

Cуперспособности EXPLAIN в PostgreSQL

Автор: Richard Yen, EXPLAIN's Other Superpowers


Большинство людей, работающих с PostgreSQL, в конечном итоге узнают две команды для настройки запросов: EXPLAIN и EXPLAIN ANALYZE.


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


Но многие не осознают, что у EXPLAIN есть ещё несколько опций, которые могут значительно упростить устранение неполадок. В некоторых случаях они отвечают на вопросы, на которые EXPLAIN ANALYZE сам по себе ответить не может.


В этой статье мы рассмотрим некоторые из этих менее популярных опций.

Продолжить чтение "Cуперспособности EXPLAIN в PostgreSQL"

Использование Patroni для создания кластера высокой доступности Postgres — Часть 3: HAProx

Автор: Shaun Thomas, Using Patroni to Build a Highly Available Postgres Cluster—Part 3: HAProxy


Статьи серии:



Добро пожаловать в третью часть нашей серии по созданию высокодоступного кластера Postgres с помощью Patroni! Часть первая была полностью посвящена созданию DCS с использованием etcd для обеспечения критически важного уровня DCS для кластера, а часть вторая добавила Patroni и Postgres в программный стек. Хотя на этом этапе можно остановиться и использовать кластер как есть, есть ещё один компонент, который сделает его гораздо более функциональным в целом.


Новым соединениям нужен способ легко и надёжно достигать основного узла. Patroni предоставляет REST-интерфейс для опроса каждого узла о его состоянии, что делает его идеальным решением для любого программного обеспечения или уровня балансировки нагрузки, совместимого с HTTP-проверками. Часть третья посвящена добавлению HAProxy для выполнения этой роли, завершая кластер уровнем маршрутизации.


Надеюсь, у вас всё ещё есть три виртуальные машины, на которых вы установили etcd, Postgres и Patroni. Они нам понадобятся для финального этапа, так что если вы ещё не прошли шаги из частей первой и второй, вернитесь, когда будете готовы.


В противном случае, давайте завершим кластер!

Продолжить чтение "Использование Patroni для создания кластера высокой доступности Postgres — Часть 3: HAProx"

Полное руководство по обновлению PostgreSQL с 17 на 18

Автор: Ilya Kosmodemiansky, An Ultimate Guide to Upgrading Your PostgreSQL Installation: From 17 to 18


Обновления мажорных версий PostgreSQL — одна из тех задач, с которой регулярно приходится сталкиваться каждому администратору баз данных. Это рутинная операция, но она также полна мелких, потенциально опасных деталей, которые могут превратить простое окно обслуживания в инцидент. Выполнив сотни обновлений в разных средах за многие годы, я хочу поделиться комплексным, практическим руководством по обновлению с PostgreSQL 17 на 18, с особым вниманием к тому, что изменилось и что наконец-то улучшилось в самом процессе обновления.


Эта статья основана на моём докладе на PGConf.EU 2024, дополненном с учётом пути обновления 17→18 и значительных улучшений, появившихся в версии 18. В это время года мы обычно рекомендуем нашим клиентам обновляться: текущий релиз 18.3 достаточно стабилен.

Продолжить чтение "Полное руководство по обновлению PostgreSQL с 17 на 18"

Вычисление скользящего среднего с помощью оконных функций в T-SQL

Пересказ статьи Jared Westover. Calculate a Moving Average with T-SQL Windowing Functions


Хотя мне нравится использовать SQL Server, есть несколько вещей, для которых лучше подходят другие инструменты. Например, вычисление скользящего среднего или накопительных итогов зачастую проще выполнить с помощью таких инструментов, как Power BI или Excel. Это связано с тем, что Microsoft разрабатывала эти программы, имея в виду подобную функциональность. Недавно мы оптимизировали сложный запрос скользящего среднего, написанный для SQL Server 2008R2. Сюрприз! В SQL Server нет встроенной функции для вычисления скользящего среднего. Но не беспокойтесь, я покажу вам, как это сделать.

В этой статье я рассмотрю два метода для создания скользящего среднего в SQL Server. Мы начнем со старого и менее производительного способа, который присутствовал в нашей производственной системе. Кто знает, может быть вы все еще используете устаревшую версию SQL Server. Затем я покажу современный способ с использованием оконных функций и то, как добавление индекса, все меняет. К концу статьи вы будете готовы, чтобы справиться с этим скользящим средним в следующий раз, когда это кому-то понадобится, а не просто скажете: "Используй Excel".

Продолжить чтение "Вычисление скользящего среднего с помощью оконных функций в T-SQL"
Категории: T-SQL

Использование Patroni для создания кластера высокой доступности Postgres — Часть 2: Postgres и Patroni

Автор: Shaun Thomas, Using Patroni to Build a Highly Available Postgres Cluster—Part 2: Postgres and Patroni



Статьи серии:


Продолжить чтение "Использование Patroni для создания кластера высокой доступности Postgres — Часть 2: Postgres и Patroni"

Представление о высокой доступности PostgreSQL как о слоях

Автор: Umair Shahid, Thinking of PostgreSQL High Availability as Layers



Высокая доступность для PostgreSQL часто рассматривается как единое, большое, драматичное решение: «Делаем мы HA или нет?»


Такой подход толкает команды к двум крайностям:



  • «геройская архитектура», которая стоит дорого и всё равно вызывает напряжение при эксплуатации, или

  • минималистичная архитектура, которую все надеются, что будет просто продолжать работать.


Более спокойный способ проектирования — рассматривать HA и аварийное восстановление (DR) как слои. Вы начинаете с базового уровня, а затем добавляете конкретные возможности только тогда, когда ваши RPO/RTO и бюджет их оправдывают.


Давайте пройдём по слоям от «одного основного узла» до «многосайтовой готовности к аварийному восстановлению».

Продолжить чтение "Представление о высокой доступности PostgreSQL как о слоях"

Подготовленные запросы (операторы) в PostgreSQL для начинающих

Пересказ статьи Tomasz Gintowt. PostgreSQL Prepared Queries (Statements) For Beginners


Когда мы пишем запросы SQL, то часто выполняем один и тот же запрос снова и снова лишь меняя значения.

PostgreSQL обладает функциональностью, которая помогает решить эту проблему, - подготовленные запросы (также называемые подготовленными операторами).

В этой статье мы выясним:

  • Что такое подготовленные запросы.

  • Чем они полезны.

  • Как их использовать в PostgreSQL.

  • Реальные примеры, которые вы сами сможете опробовать.

Никаких непонятных слов. Никакой сложной теории. Простые ясные примеры.
Продолжить чтение "Подготовленные запросы (операторы) в PostgreSQL для начинающих"

Новости за 2026-03-14 - 2026-03-20

§ Новая задача DML от pegoopik опубликована под номером 27 (оценка сложности 2 балла).

Выполнены следующие переносы:

27 (старая) -> 18 -> 9 -> (-8)


§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
179 (SELECT) 6 5
Guest's book 5 10
20 (DML) 4 7

§ Авторы недели на форуме

Автор		Сообщений
pegoopik 5
s108 3
selber 3
rock_4 2

Продолжить чтение "Новости за 2026-03-14 - 2026-03-20"

Использование Patroni для создания кластера высокой доступности Postgres — Часть 1: etcd

Автор: Shaun Thomas, Using Patroni to Build a Highly Available Postgres Cluster—Part 1: etcd


Статьи серии:



Предыдущая статья из цикла PG Phriday была посвящена архитектуре кластера Patroni — как и почему он устроен именно так. На этот раз речь пойдёт о непосредственном построении такого кластера. Я часто слышал, что эксплуатация Postgres может пугать, а Patroni находится на уровень выше. Что ж, со вторым я спорить не буду, но я могу хотя бы попытаться облегчить некоторые трудности.


Чтобы избежать ошеломляющего потока информации из двадцати страниц инструкций, я разбил эту статью на серию из трёх частей по следующему принципу:



  • Etcd

  • Postgres и Patroni

  • HAProxy


Это позволит описать каждый из трёх уровней, представляющих полный стек Patroni, и создаст удобный справочный материал для каждого из них.


С этим разобрались, давайте приступим!


Продолжить чтение "Использование Patroni для создания кластера высокой доступности Postgres — Часть 1: etcd"

Как PostgreSQL сканирует ваши данные

Автор: Warda Bibi, How PostgreSQL Scans Your Data


Чтобы понять, как PostgreSQL сканирует данные, сначала нужно понять, как PostgreSQL их хранит.


Таблица хранится как набор 8-килобайтных страниц (по умолчанию) на диске. Каждая страница имеет заголовок, массив указателей на элементы (также называемых линейными указателями) и сами данные кортежей, растущие снизу вверх. Каждый кортеж имеет свой собственный заголовок, содержащий информацию о видимости: xmin, xmax, cmin/cmax и биты infomask.


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



  • Последовательное сканирование (Sequential Scan)

  • Индексное сканирование (Index Scan)

  • Сканирование только индекса (Index-Only Scan)

  • Сканирование по битовой карте (Bitmap Index Scan)


В этой статье мы рассмотрим каждый из этих типов сканирования по отдельности.

Продолжить чтение "Как PostgreSQL сканирует ваши данные"

Настройка производительности в PostgreSQL 17: понимание преполагаемого и действительного планов выполнения

Пересказ статьи Jeyaram Ayyalusamy. 29 - PostgreSQL 17 Performance Tuning: Understanding Estimates vs. Actuals in Query Plans




Настройка производительности в PostgreSQL часто сводится к единственному навыку: умению читать планы выполнения. Команда PostgreSQL EXPLAIN ANALYZE - главный инструмент для этого. Она показывает не только то, как выполняется запрос, но и то, чего ожидал оптимизатор PostgreSQL, и что произошло на самом деле.

При просмотре плана выполнения вы всегда должны задать себе два больших вопроса:

  1. Оправданы ли временные параметры, указанные в выводе команды EXPLAIN ANALYZE, для данного запроса?

  2. В каком месте происходит внезапный скачок времени выполнения?

Места этих скачков в плане выполнения часто обнаруживают точный узел или операцию, которая замедляет ваш запрос.
Продолжить чтение "Настройка производительности в PostgreSQL 17: понимание преполагаемого и действительного планов выполнения"

Новости за 2026-03-07 - 2026-03-13

§ Изменения среди лидеров рейтинга

Рейтинг	Участник (решенные задачи)
20 selber (179)

§ Лидеры недели

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Lysenko O. (Oleg15062025) 15 26 22 0 22 2327
Бадахьян С. (wamp.j) 16 21 22 0 22 4014
Odnokurtsev (AlFochino) 12 63 21 0 21 1099
Kad V.Y. (s108) 11 57 17 0 17 968
Сафронов П.А. (Paulus73) 7 97 14 3 17 260
Сильван (silvr) 2 67 4 0 4 709
Продолжить чтение "Новости за 2026-03-07 - 2026-03-13"

T-SQL в SQL Server 2025: нечеткий поиск строки II

Пересказ статьи Steve Jones. T-SQL in SQL Server 2025: Fuzzy String Search II


В последней статье мы проверяли нечеткое соответствие строк при помощи новых функций в SQL Server 2025. Мы знаем, что сравнение строк всегда вызывало сложности, когда у нас нет качественных данных. Если нам нужно точное совпадение, SQL Server работает отлично. Однако мы часто ждем от пользователей ввода значений без опечаток и знать, какие значения они хотят найти. Или хотя бы знать часть строки.

В SQL Server 2025 появилось несколько новых функций, которые помогают с нечетким совпадением строк. В последней статье были рассмотрены функции расстояния, EDIT_DISTANCE() и EDIT_DISTANCE_SIMILARITY(). В этой статье мы проверим две другие функции, JARO_WINKLER_DISTANCE() и JARO_WINKLER_SIMILARITY(). Как и другие функции, они находятся в предварительной версии (по состоянию на январь 2026 г.), так что будьте осторожны с использованием их в продакшене. Вам также необходимо включить эти функции как часть конфигурации области базы данных. Мы рассмотрели это в первой статье.

Это часть серии статей, посвященной тому, как язык T-SQL развивается в SQL Server 2025.

Примечание. Некоторые из этих изменений уже доступны в различных продуктах Azure SQL.

Продолжить чтение "T-SQL в SQL Server 2025: нечеткий поиск строки II"
Категории: T-SQL