Skip to content

Всё о GUC по порядку: io_method и io_workers

Christophe Pettus: All Your GUCs in a Row: io_method and io_workers


Параметры io_*, которые мы рассматривали до сих пор, описывают сами запросы ввода-вывода: насколько велик каждый из них, сколько процесс может держать в полёте. Эти два решают, кто фактически их выполняет. Я писал об архитектуре и о том, что PostgreSQL 19 с ней делает, в статье AIO Grows Up; здесь — взгляд на уровне параметров, и он включает исправление того, что я там сказал.

Продолжить чтение "Всё о GUC по порядку: io_method и io_workers"

Новости за 2026-09-26 - 2026-10-02

§ Рейтинговая задача 254 от Baser перенесена на обучающий этап под номером 168 (сложность 3 балла).


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

Топик		Сообщений	Просмотров
53 (SELECT) 12 6
303 (SELECT) 6 3

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

Автор		Сообщений
pegoopik 8
selber 4
gennadi_s 2
vasilyvanc 2
Продолжить чтение "Новости за 2026-09-26 - 2026-10-02"

Всё о GUC по порядку: io_max_concurrency

Автор Christophe Pettus: All Your GUCs in a Row: io_max_concurrency


effective_io_concurrency — это запрос. io_max_concurrency — это удовлетворение.



Новый в PostgreSQL 18 как часть подсистемы асинхронного ввода-вывода, io_max_concurrency представляет собой жёсткий потолок того, сколько операций ввода-вывода один процесс может иметь в полёте одновременно. Не на весь кластер; на процесс. Контекст — postmaster, поэтому для изменения требуется перезапуск, а значение по умолчанию — -1, что указывает PostgreSQL выбрать значение при запуске. Диапазон простирается до 1024.

Продолжить чтение "Всё о GUC по порядку: io_max_concurrency"

PostgreSQL умер и устаревшее соединение: как их отличить

Автор Umair Shahid: PostgreSQL Lockup vs Stale Connection: How to Tell Them Apart


«База данных зависла». Мы слышали ту или иную версию этого предложения не раз за прошедшую неделю, от одной и той же команды, по поводу того, что выглядело как одна и та же проблема. Это была не одна и та же проблема. Однажды Postgres действительно перестал отвечать. Все остальные разы Postgres был в порядке, а соединение, находившееся в пуле приложения, тихо умерло где-то между приложением и базой данных.



Обе неисправности приводят к одному и тому же вызову в 2 часа ночи: приложение не может связаться с базой данных. Только одна из них означает, что база данных действительно в беде. Путаница между ними стоит вам самого дорогого ресурса в инциденте — первых десяти минут, когда вы ещё решаете, с каким типом проблемы имеете дело.



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

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

Всё о GUC по порядку: io_combine_limit и io_max_combine_limit

Автор Christophe Pettus: All Your GUCs in a Row: io_combine_limit and io_max_combine_limit


Теперь мы вступаем во владения io_* — самую новую в пространстве имён GUC: ничего из этого не существовало до PostgreSQL 17. Если effective_io_concurrency отвечает на вопрос «сколько операций ввода-вывода мы держим в полёте?», то io_combine_limit отвечает на ортогональный вопрос: «какова величина каждой из них?» Глубина и ширина.

Продолжить чтение "Всё о GUC по порядку: io_combine_limit и io_max_combine_limit"

Всё о GUC по порядку: IntervalStyle

Автор Christophe Pettus: https://thebuild.com/blog/all-your-gucs-in-a-row-intervalstyle/


IntervalStyle — младший «брат» DateStyle, и он унаследовал семейную черту: он выглядит как предпочтение форматирования вывода, но также меняет то, как PostgreSQL разбирает ваш ввод. Мы рассматривали версию даты этого трюка в статье про DateStyle. Версия для интервалов менее известна и в одном конкретном случае более неприятна.


Продолжить чтение "Всё о GUC по порядку: IntervalStyle"

Транзакции в PostgreSQL: COMMIT, ROLLBACK и SAVEPOINT

Пересказ статьи PostgreSQL Transactions: COMMIT, ROLLBACK and SAVEPOINT


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

Но что если в середине произойдет сбой?

Вот почему PostgreSQL использует транзакции - для гарантии, что ваши данные останутся корректными.
Продолжить чтение "Транзакции в PostgreSQL: COMMIT, ROLLBACK и SAVEPOINT"

Всё о GUC по порядку: integer_datetimes

Автор Christophe Pettus: All Your GUCs in a Row: integer_datetimes


Каждое соединение, которое кто-либо устанавливал с сервером PostgreSQL начиная с версии 8.0, открывалось с того, что сервер без приглашения объявлял значение integer_datetimes. Начиная с PostgreSQL 10 объявляемое значение — это единственное значение, с которым вообще может быть собран сервер PostgreSQL, и текущая документация отделывается от всей темы одним предложением: «Начиная с PostgreSQL 10 это всегда on». Так что это пост о том, почему параметр ровно с одним возможным значением всё ещё представляется каждому клиенту в начале каждого разговора.

Продолжить чтение "Всё о GUC по порядку: integer_datetimes"

Всё о GUC по порядку: in_hot_standby

Автор Christophe Pettus: All Your GUCs in a Row: in_hot_standby


in_hot_standby — это лампочка, а не переключатель. Он сообщает, является ли сервер, к которому вы подключены, в данный момент горячим резервом: включён, когда ваша сессия работает на реплике, которая воспроизводит WAL и принимает запросы только для чтения (состояние, которое включает hot_standby), выключен на первичном сервере. Это логический параметр, он появился в PostgreSQL 14, и его контекст — ни один из обычных четырёх, потому что никто не может его изменить:


postgres=# SET in_hot_standby = off;
ERROR: parameter "in_hot_standby" cannot be changed
postgres=# ALTER SYSTEM SET in_hot_standby = off;
ERROR: parameter "in_hot_standby" cannot be changed
Продолжить чтение "Всё о GUC по порядку: in_hot_standby"

Всё о GUC по порядку: ignore_system_indexes

Автор Christophe Pettus: All Your GUCs in a Row: ignore_system_indexes


ignore_system_indexes завершает череду из трёх последовательных параметров с именем ignore_-что-то и с удобным отрывом является самым вежливым в этом семействе. ignore_checksum_failure и ignore_invalid_pages говорят PostgreSQL продолжать, несмотря на доказательства повреждения; этот же просто говорит ему перестать доверять набору путей доступа. Это логический параметр, по умолчанию выключен, и он живёт в редком контексте backend: его можно установить только до того, как сессия существует, либо в postgresql.conf (влияя только на новые сессии), либо во время подключения, что удобнее всего сделать как PGOPTIONS="-P", эквивалентный серверный переключатель. Установите его после подключения — и получите ошибку. Во всех поддерживаемых версиях это один из ровно двух параметров с таким контекстом (другой — post_auth_delay), он классифицирован как параметр разработчика и не появляется в образце файла конфигурации. Всё это — способ сервера сказать: вы не должны были это находить.

Продолжить чтение "Всё о GUC по порядку: ignore_system_indexes"

Новости за 2026-09-19 - 2026-09-25

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

Топик		Сообщений	Просмотров
53 (SELECT) 7 6
55 (Learn) 2 5

§ Претенденты на попадание в TOP 100

Рейтинг	 Участник (решенные задачи, время в днях)
140 Rujan (143, 453.871)
316 saah (109, 48.785)

Продолжить чтение "Новости за 2026-09-19 - 2026-09-25"

Всё о GUC по порядку: ignore_invalid_pages

Автор Christophe Pettus: All Your GUCs in a Row: ignore_invalid_pages


Никто не находит ignore_invalid_pages, читая документацию от корки до корки. Вы находите его, вставив PANIC: WAL contains references to invalid pages в поисковую систему, обычно в час, когда вы предпочли бы спать. Это параметр разработчика, отсутствующий в postgresql.conf.sample, присутствующий начиная с PostgreSQL 13. По умолчанию он выключен, а контекст — postmaster, что на этот раз ничего не стоит: сервер, который вам нужно было бы перезапустить, уже не работает.



Продолжить чтение "Всё о GUC по порядку: ignore_invalid_pages"

Первая нормальная форма (1NF): нарушение "ненарушаемого правила" в проектировании базы данных

Пересказ статьи Lee Asher. First Normal Form (1NF): Breaking the ‘unbreakable rule’ in database design


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

Правильная нормализация данных является критической проблемой при проектировании базы данных, контролируемой набором правил моделирования данных, известных как "нормальные формы". Хотя даже лучшие разработчики затрудняются в объяснении различия между более высокими нормальными формами, одно правило, которое мы все знаем, это Первая Нормальная Форма. Обычно ее называют 1НФ, а правило часто выражают просто тремя словами: нет повторяющихся групп.
Продолжить чтение "Первая нормальная форма (1NF): нарушение "ненарушаемого правила" в проектировании базы данных"

Всё о GUC по порядку: ignore_checksum_failure

Christophe Pettus: All Your GUCs in a Row: ignore_checksum_failure


ignore_checksum_failure — это не столько параметр конфигурации, сколько ломик в витрине за стеклом. По умолчанию он выключен, он вообще не появляется в postgresql.conf.sample (образец файла вежливо отказывается его рекламировать), и документация помещает его в раздел «Параметры разработчика», рядом с другими инструментами, которые вы надеетесь никогда не будете держать в руках. Контекст — суперпользователь, что означает, что суперпользователь (или роль, которой было предоставлено право SET на него, а такой роли не должно существовать) может переключить его в живой сессии командой SET; без перезагрузки, без перезапуска. Именно такая гранулярность и требуется для его единственного законного применения. Он появился в PostgreSQL 9.3 вместе с самими контрольными суммами данных: функция, которая проверяет, и рычаг, который отменяет проверку, родились вместе.

Продолжить чтение "Всё о GUC по порядку: ignore_checksum_failure"

Всё о GUC по порядку: idle_session_timeout

Автор Christophe Pettus: All Your GUCs in a Row: idle_session_timeout


idle_session_timeout — это уборка, а не защита. Его «собрат», idle_in_transaction_session_timeout, защищает базу данных от реального вреда: простаивающая транзакция удерживает блокировки и фиксирует горизонт xmin, и vacuum от этого страдает. Сессия, простаивающая вне транзакции, ничего из этого не делает. Она занимает слот соединения, фоновый процесс и немного памяти. Вот и весь счёт, и этот параметр существует, чтобы его выставить. В документации сказано то же самое, отмечая, что простаивающая сессия без транзакции не создаёт больших затрат, поэтому необходимости в этом таймауте меньше, чем в его «собрате».

Продолжить чтение "Всё о GUC по порядку: idle_session_timeout"