Skip to content

На пути к быстрому PostgreSQL: ключевые точки оптимизации памяти

Автор: Warda Bibi, Unlocking High-Performance PostgreSQL: Key Memory Optimizations

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



Это руководство проведёт вас через два самых важных параметра памяти:



  • shared_buffers

  • work_mem

Продолжить чтение "На пути к быстрому PostgreSQL: ключевые точки оптимизации памяти"

Понимание combinebackup в PostgreSQL

Пересказ статьи Tomasz Gintowt. Understanding pg_combinebackup in PostgreSQL


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

В этой статье мы разберем, что делает pg_combinebackup, как он работает и как вы можете использовать его в ваших стратегиях резервирования и восстановления.
Продолжить чтение "Понимание combinebackup в PostgreSQL"

500 миллисекунд на планирование: как статистика PostgreSQL замедлила запрос в 20 раз

Автор: Andrei Lepikhov, 500 Milliseconds on Planning: How PostgreSQL Statistics Slowed Down a Query 20 Times Over


Запрос выполняется всего за 2 миллисекунды, но этап его планирования занимает 500 мс. База данных имеет разумный размер, запрос затрагивает 9 таблиц, а default_statistics_target установлен всего в 500. Откуда такое несоответствие?



Этот вопрос недавно был поднят в списке рассылки pgsql-performance, и расследование выявило несколько неожиданного виновника: статистика столбцов, хранящаяся в таблице pg_statistic PostgreSQL.

Продолжить чтение "500 миллисекунд на планирование: как статистика PostgreSQL замедлила запрос в 20 раз"

Проблема неявных транзакций

Пересказ статьи Steve Jones. The Challenge of Implicit Transactions


Сценарий


Вы выполняете такой код:



Все выглядит хорошо. Я выполнил вставку и вижу данные в таблице. Я тороплюсь, поэтому щелкаю "close" (закрыть) на вкладке и вижу это:



Я настолько привык к этим раздражающим меня сообщениям в SSMS, что я нажимаю «Нет», чтобы избавиться от них и закрыть окно.
Продолжить чтение "Проблема неявных транзакций"
Категории: T-SQL

Новости за 2026-01-24 - 2026-01-30

§ Автор уточнил формулировку и усилил проверку задачи 308 (SELECT, рейтинг).


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

Топик		Сообщений	Просмотров
Certification 3 12
3 (SELECT) 3 10
58 (DML) 2 3
20 (DML) 2 5
191 (SELECT) 2 4

Продолжить чтение "Новости за 2026-01-24 - 2026-01-30"

Почему ваша архитектура высокой доступности — это иллюзия (и это нормально)

Автор: Lætitia AVROT, Why Your HA Architecture is a Lie (And That's Okay)


Если бы Дарт Вейдер существовал и решил бы сделать с Землёй то же, что он сделал с Алдерааном, все потеряли бы данные.



Мне нравится эта цитата Роберта Хааса, потому что это отрезвляющая реальность, которая нужна всем нам. В мире баз данных нам постоянно продают мечту о «пяти девятках» (99,999% времени доступности) и «нулевой потере данных» (RPO=0). Мы тратим месяцы на построение сложных кластеров, чтобы достичь этого.



Давайте будем честными: это сказки. Красивые для воображения, но они не существуют в рабочей среде. Если планетарная лазерная пушка — или даже просто серьёзный сетевой обрыв — поразит ваш дата-центр, ваши «гарантии» исчезнут.



Моя цель сегодня — не помочь вам поверить в сказки. Моя цель — помочь вам построить архитектуру, которая действительно работает.

Продолжить чтение "Почему ваша архитектура высокой доступности — это иллюзия (и это нормально)"

Неиспользуемые индексы в PostgreSQL: риски, обнаружение и безопасное удаление

Автор: Semab Tariq, Unused Indexes In PostgreSQL: Risks, Detection, And Safe Removal



Индексы существуют для ускорения доступа к данным. Они позволяют PostgreSQL избегать полного просмотра таблицы, значительно сокращая время выполнения запросов для рабочих нагрузок с интенсивным чтением.



Из реального производственного опыта мы наблюдали, что хорошо спроектированные, целевые индексы могут улучшить производительность запросов в 5 и более раз, особенно на больших транзакционных таблицах.



Однако индексы не являются бесплатными.



И в этой статье мы обсудим, какие проблемы могут вызывать неиспользуемые индексы и как удалить их из производственных систем с планом отката, безопасно.

Продолжить чтение "Неиспользуемые индексы в PostgreSQL: риски, обнаружение и безопасное удаление"

Подводные камни Truncate Table

Пересказ статьи Peter Skoglund. Truncate Table Pitfalls


Усечение таблицы может быть замечательно быстрым - и чрезвычайно опасным при неосмотрительном использовании. Если вы хотите иметь скорость и не разочароваться, тут дается практическое, готовое для интервью руководство по реальным подводным камням TRUNCATE TABLE в SQL Server и то, как избежать их.

Справка


  • TRUNCATE TABLE является операцией DDL, которая освобождает страницы (эффективно журнализированные) и сбрасывает IDENTITY к начальному значению. При этом триггеры DELETE не срабатывают. Возможен откат при выполнении внутри транзакции.

  • Завершается неудачно, если на таблицу ссылается внешний ключ (даже если дочерняя таблица пуста), используется в индексированных представлениях, является системно-версионной (временной), опубликованной для репликации или включена для CDC, или на нее ссылается ограничение EDGE графа. Существует специальная возможность для самоссылающихся внешних ключей.

  • Начиная с SQL Server 2016, вы можете усекать конкретные секции: TRUNCATE TABLE dbo.Fact WITH (PARTITIONS (4 TO 6)); (индексы должны быть выровнены).

Продолжить чтение "Подводные камни Truncate Table"
Категории: T-SQL

Введение в буферы PostgreSQL

Автор: Radim Marek, Introduction to Buffers in PostgreSQL


Работа над RegreSQL заставила меня уделить много внимания буферам. Если вы иногда работаете с PostgreSQL, то наверняка слышали о настройке shared_buffers и следовали старому доброму совету выставить его на уровне 1/4 от доступной оперативной памяти. Но после того как мы немного слишком увлеклись этой темой в недавнем выпуске Postgres FM, меня спросили, что к чему.


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

Продолжить чтение "Введение в буферы PostgreSQL"

Поведение команды ALTER TABLE для секционированных таблиц в PostgreSQL

Автор: Chao Li, Understanding ALTER TABLE Behavior on Partitioned Tables in PostgreSQL


Секционированные таблицы — это базовая возможность PostgreSQL, но один аспект по-прежнему регулярно вызывает путаницу — даже у опытных пользователей:


Как именно ведёт себя команда ALTER TABLE, когда задействованы секции?


Распространяется ли операция на секции? Влияет ли она на будущие секции? Действительно ли ключевое слово ONLY делает то, что заявлено? Почему некоторые команды работают на родительской таблице, но не на секциях — или наоборот?


Сегодня документация PostgreSQL хорошо описывает отдельные подкоманды ALTER TABLE, но редко объясняет их взаимодействие с секционированными таблицами в целом. В результате пользователи часто узнают о реальном поведении только методом проб и ошибок.


Эта статья обобщает систематическое исследование поведения ALTER TABLE для секционированных таблиц, превращая разрозненные правила в последовательную классификационную модель.


Продолжить чтение "Поведение команды ALTER TABLE для секционированных таблиц в PostgreSQL"

Новости за 2026-01-17 - 2026-01-23

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

Топик		Сообщений	Просмотров
192 (Learn) 12 8
1 (SELECT) 7 9
39 (Learn) 4 9
10 (DML) 3 6
25 (Learn) 2 9

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

Автор		Сообщений
pegoopik 12
selber 8
Meilleur_NG 3
rock_4 2
KhNadezhda 2
Продолжить чтение "Новости за 2026-01-17 - 2026-01-23"

Четыре причины раздувания таблиц в PostgreSQL и как с этим бороться

Автор: Shinya Kato, 4 causes of table bloat in PostgreSQL and how to address them


Раздувание таблиц в PostgreSQL — это явление, при котором «мёртвые записи» (dead tuples), образовавшиеся в результате операций UPDATE или DELETE, не собираются процессом VACUUM, что приводит к неоправданному увеличению размеров файлов данных.


Чтобы VACUUM мог освободить мёртвые записи, должна быть гарантия, что эти записи «точно не могут быть использованы какими-либо активными на данный момент транзакциями». Если старые транзакции сохраняются по какой-либо причине, сборка мусора процессом VACUUM останавливается на этой точке.


В этой статье объясняются следующие четыре причины раздувания таблиц: как каждая проявляется, как определить коренную причину и как её устранить.



  1. Длительные транзакции

  2. Незавершённые подготовленные транзакции

  3. Запросы на серверах-репликах с включённым параметром hot_standby_feedback

  4. Задержка логической репликации


Продолжить чтение "Четыре причины раздувания таблиц в PostgreSQL и как с этим бороться"

Нестандартная оптимизация PostgreSQL

Автор: Haki Benita, Unconventional PostgreSQL Optimizations


Когда дело доходит до оптимизации баз данных, разработчики часто хватаются за одни и те же старые инструменты: немного переписать запрос, навесить индекс на столбец, денормализовать, проанализировать, очистить, перестроить кластер и т.д. Традиционные методы эффективны, но иногда творческий подход может принести реальную пользу!


В этой статье я представляю нестандартные методы оптимизации в PostgreSQL.

Продолжить чтение "Нестандартная оптимизация PostgreSQL"

Индексы BRIN в PostgreSQL для специалистов в SQL Server

Автор: Klaus Aschenbrenner, BRIN Indexes in PostgreSQL


Когда специалисты по SQL Server начинают серьёзно работать с PostgreSQL, большая часть обучения кажется комфортной. Таблицы ведут себя ожидаемо, транзакции знакомы, а B-деревья выглядят обнадёживающе похожими на то, что вы использовали годами в SQL Server. Затем вы сталкиваетесь с индексами BRIN.


На первый взгляд они кажутся почти безрассудными: нет указателей на строки, нет точной навигации и явное принятие ложных срабатываний. И всё же на очень больших таблицах индексы BRIN часто обеспечивают прирост производительности, для достижения которого в SQL Server потребовались бы кластерные индексы, секционирование или даже columnstore-индексы. Чтобы понять почему, нужно посмотреть не только на то, что делает BRIN, но и на то, как он работает внутри.

Продолжить чтение "Индексы BRIN в PostgreSQL для специалистов в SQL Server"

Утраченный символ - от EBCDIC до Emoji

Автор: Joe Celko, Getting Out of Character


Молодые программисты выросли с ASCII и Unicode как единственными способами представления символьных данных в компьютере. Но в тёмные века, до того как мы изобрели грязь и вошли в каменный век, были и другие претенденты.

Продолжить чтение "Утраченный символ - от EBCDIC до Emoji"