Skip to content

Треугольник производительности Postgres

Автор: Richard Yen, The Postgres Performance Triangle


Каждый, кто хотя бы по колено погрузился в фотографию, знает о существовании треугольника экспозиции: диафрагма, выдержка и светочувствительность (ISO). В зависимости от того, какого художественного эффекта вы хотите добиться, вы регулируете эти три параметра, понимая, что у каждого изменения есть своя цена. Проработав несколько реальных случаев и предложив решения заказчикам, я начал думать о настройке производительности Postgres схожим образом. Существуют базовые параметры, которые можно настраивать, и у каждого выбора администратора баз данных есть свои последствия:




  • Распределение памяти (Memory Allocation)

  • Дисковый ввод-вывод (Disk I/O)

  • Конкурентность (Concurrency)



Каждый из этих факторов (в общих чертах) влияет на пропускную способность — то есть на то, какой объём работы ваша система успевает выполнить.



Оговорка: Я понимаю, что с академической точки зрения понятие «пропускной способности» не полностью отражает суть баланса между этими концепциями, но, пожалуйста, отнеситесь к этому снисходительно!



Давайте поговорим о том, как каждый из этих трёх аспектов взаимодействует со всей системой и как выглядят сопутствующие компромиссы.

Continue reading "Треугольник производительности Postgres"

Выбор метода текстового поиска в PostgreSQL

Автор: Craig Ringer, Choosing a PostgreSQL text search method


(Эта статья написана применительно к PostgreSQL 9.3. Если вы используете более новую версию, пожалуйста, проверьте, остались ли описанные ограничения в силе.)



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

Continue reading "Выбор метода текстового поиска в PostgreSQL"

T-SQL в SQL Server 2025: функции кодирования

Пересказ статьи Steve Jones. T-SQL in SQL Server 2025: Encoding Functions


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

Функции кодирования: BASE64_ENCODE и BASE64_DECODE


В язык T-SQL были добавлены две новых функции: BASE64_ENCODE, BASE64_DECODE . Эти функции взаимно обратны, подобно функциям шифрования. Одна функция возвращает вспять действия другого, и они предназначены для совместного использования.
Continue reading "T-SQL в SQL Server 2025: функции кодирования"

PostgreSQL MVCC, байт за байтом

Автор: , Radim Marek: PostgreSQL MVCC, Byte by byte


Вы выполняете SELECT * FROM orders в одном сеансе psql и видите 50 миллионов строк. Ваш коллега в другом сеансе выполняет тот же запрос в тот же момент и видит 49 999 999. Никто из вас не ошибается, и никто не видит устаревших данных. Вы оба читаете одни и те же страницы кучи размером 8 КБ, одни и те же байты на диске.



В этом заключается обещание MVCC (многоверсионного контроля конкурентного доступа) PostgreSQL, и именно поэтому читатели никогда не блокируют писателей, а писатели никогда не блокируют читателей. Это также одна из самых неправильно понимаемых частей механизма хранения. Люди знают, что «существует несколько версий строки», и на этом останавливаются.

Continue reading "PostgreSQL MVCC, байт за байтом"

Настройка производительности PostgreSQL 17: индекс BRIN (Block Range INdex)

Пересказ статьи Jeyaram Ayyalusamy. 22 - PostgreSQL 17 Performance Tuning: BRIN (Block Range INdex)




При работе с очень большими таблицами в PostgreSQL традиционные индексы типа B-Tree или GiST могут чрезвычайно вырасти в размерах, что занимает значительное время на их обслуживание. Для временных рядов или последовательно упорядоченных данных PostgreSQL предлагает более разумный и облегченный вариант: BRIN (Block Range Index).

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

Давайте пошагово рассмотрим пример.
Continue reading "Настройка производительности PostgreSQL 17: индекс BRIN (Block Range INdex)"

Новости за 2026-04-18 - 2026-04-24

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

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

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

Рейтинг	Участник (решенные задачи)
12 alex_v (235, 236, 238, 239)
15 gennadi_s (198, 199)
20 selber (212)
37 Шведа Сауля (159)
87 rock_4 (162, 166)

Continue reading "Новости за 2026-04-18 - 2026-04-24"

Как создать связанный сервер в SQL Server для Oracle 26ai Free

Пересказ статьи Greg Low. How to Create a SQL Server Linked Server to Oracle 26ai Free


Легко перемещайте данные из SQL Server в Oracle 26ai Free, используя это пошаговое руководство. Узнайте как установить связанный сервер, сконфигурировать FREEPDB1 и избежать типичных ошибок.

Недавно мне пришлось перенести некоторые данные из SQL Server на Oracle 26ai в редакции Free. Я решил проверить, поможет ли связанный сервер сделать эту работу, поскольку зачастую это самый простой способ…

Это позволит мне просто писать операторы INSERT SELECT, но в SQL Server, связанные серверы с Oracle, известны своей неуклюжестью и часто имеют проблемы с некоторыми типами данных, настройками времени, и т. д.

В прошлом мне не приходилось создавать связанный сервер к Oracle 26ai Free, поэтому я решил, что должен задокументировать свои действия, чтобы в будущем я мог легко найти их и, возможно, помочь кому-то еще.
Continue reading "Как создать связанный сервер в SQL Server для Oracle 26ai Free"

DROP COLUMN в PostgreSQL: столбец не удаляется сразу

Пересказ статьи Tomasz Gintowt. PostgreSQL DROP COLUMN: It Doesn’t Remove the Column Immediately


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

Начиная с PostgreSQL 11, операция ALTER TABLE ... DROP COLUMN стала выполняться быстрее, поскольку PostgreSQL больше не переписывает всю таблицу сразу. Напротив, он:

  • Помечает столбец как удаленный (невидимый и недоступный).

  • Временно оставляет его данные на диске.

  • Освобождает хранилище, только когда таблица переписывается (VACUUM FULL, CLUSTER или pg_repack).

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


Continue reading "DROP COLUMN в PostgreSQL: столбец не удаляется сразу"

"Простая" функция, которой нет: миграция функции T-SQL STR() в PostgreSQL

Пересказ статьи Assaf Fraenkel. The “Simple” Function That Isn’t: Migrating T-SQL’s STR() to PostgreSQL


Иногда миграция оказывается более сложной, чем ожидалось. На первый взгляд определение функции STR в SQL Server является простым: она возвращает символьное представление числовых данных, выровненные по правому краю с заданной длиной и точностью до десятичных знаков. Однако при попытке конвертации вы обнаруживаете огромное число пограничных случаев, большинство из которых плохо документированы.

Техническая спецификация


Стандартной спецификацией этой функции является:

STR ( float_expression [ , length [ , decimal ] ] )
  • Значение по умолчанию Length (длина): 10
  • Значение по умолчанию Decimal (масштаб): 0
Continue reading ""Простая" функция, которой нет: миграция функции T-SQL STR() в PostgreSQL"

Погружение в события ожиданий PostgreSQL

Автор: Richard Yen, Understanding PostgreSQL Wait Events


Одним из самых полезных инструментов отладки в современном PostgreSQL является система событий ожиданий (wait events). Когда запрос замедляется или база данных становится ограниченной по процессору, естественно возникает вопрос: «Чего на самом деле ожидают сеансы?» Postgres предоставляет эту информацию через представление pg_stat_activity с помощью двух столбцов:



  • wait_event_type — тип события ожидания

  • wait_event — само событие ожидания


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


LWLock


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

Continue reading "Погружение в события ожиданий PostgreSQL"

Нулевая задержка autovacuum_vacuum_cost_delay - вас сметёт лавина записи

Автор: Jeremy Schneider, Zero autovacuum_vacuum_cost_delay, Write Storms, and You


Несколько дней назад Шон Томас (Shaun Thomas) опубликовал статью в блоге pgEdge под названием «Контрольные точки, лавинная запись и вы». К сожалению, на многих корпоративных блогах больше нет возможности комментировать. Я оставил несколько комментариев в LinkedIn, но в целом позвольте мне сказать, что эта статья — отличное чтение, и я всегда рад, когда кто-то погружается в важную и обойдённую вниманием тему, даёт хорошее техническое описание и включает реальные результаты тестов для иллюстрации деталей.


У меня сегодня нет воспроизводимых реальных результатов тестов. Но у меня есть хорошая история и немного реальных данных.

Continue reading "Нулевая задержка autovacuum_vacuum_cost_delay - вас сметёт лавина записи"

EXPLAIN ANALYZE в PostgreSQL - практическое руководство для веб-разработчиков

Пересказ статьи Vishu Bommoju. EXPLAIN ANALYZE in PostgreSQL — A Practical Guide for Web Developers


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

PostgreSQL дает нам одно оружие, которое важнее почти всего остального при отладке производительности:

EXPLAIN ANALYZE

В этой статье объясняется EXPLAIN ANALYZE с точки зрения его практического использования, а не как теория из учебника.

Continue reading "EXPLAIN ANALYZE в PostgreSQL - практическое руководство для веб-разработчиков"

Ошибки проектирования баз данных и как избежать и исправить их

Пересказ статьи Roxana Haidiner. Database Design Errors to Avoid & How To Fix Them


Даже сейчас, в 2025 году, при наличии мощных инструментов баз данных и облачных платформ разработчики все еще допускают элементарные ошибки при проектировании схемы. Они вызывают проблемы производительности, несогласованности данных и другие технологические проблемы.

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

  1. Отсутствующие внешние ключи.

  2. Отсутствующие или неверно спроектированные индексы.

  3. Использование JSON и JSONB в реляционных базах данных.

  4. Игнорирование нормализации (или её чрезмерное применение).

  5. Нечеткие соглашения об именовании.

  6. Отсутствие документации к схеме.
Continue reading "Ошибки проектирования баз данных и как избежать и исправить их"

Контрольные точки, лавинная запись и вы

Автор: Shaun Thomas,Checkpoints, Write Storms, and You


Каждая база данных должна примириться с двумя неприятными истинами: память быстра, но энергозависима, а диск медленен, но долговечен. Postgres справляется с этим противоречием с помощью журнала предзаписи (Write-Ahead Log, WAL), который регистрирует каждое изменение до того, как оно произойдёт. Но WAL не может расти бесконечно. В какой-то момент Postgres должен сбросить все накопившиеся грязные страницы на диск и объявить чистую начальную точку. Этот процесс называется контрольной точкой (checkpoint), и когда он идёт не по плану, пропускная способность может упасть до нуля.

Continue reading "Контрольные точки, лавинная запись и вы"