Skip to content

Всё о GUC по порядку: default_transaction_isolation and default_transaction_read_only

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


Оставшиеся два из трёх параметров default_transaction_*, завершающие набор, начатый параметром default_transaction_deferrable. Каждый из них устанавливает значение по умолчанию для сеанса для одного из трёх свойств транзакции — уровня изоляции, режима доступа и отложенности, — и для всех трёх правило одинаково: область действия GUC редко является той, которая вам нужна. Интересное содержание заключается в том, что означают значения, и для уровня изоляции это больше, чем думает большинство людей.

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

Аварийное восстановление — это процесс, а не инструмент (Часть 1)

Автор: Richard Yen, Disaster Recovery is a Process, Not a Tool (Part 1)


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


Ландшафт изменился


Это уже не тот мир, в котором мы живём сейчас. Время безотказной работы стало гораздо более критичным, чем раньше. Пять девяток когда-то были амбициозной целью — теперь четыре девятки для многих команд являются просто ожидаемым стандартом, и даже несколько минут простоя в месяц кажутся большой проблемой. Мы больше не отслеживаем средние значения в наших метриках; мы отслеживаем p99-задержки, потому что нам действительно важно, чтобы последний 1% пользователей получал хороший опыт работы.


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



Postgres, конечно, не исключение. Именно в таком мире и должен действовать план аварийного восстановления Postgres.

Продолжить чтение "Аварийное восстановление — это процесс, а не инструмент (Часть 1)"

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

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


default_transaction_deferrable устанавливает значение по умолчанию для атрибута транзакции DEFERRABLE для новых транзакций. Значение по умолчанию — off, контекст — user, и атрибут, который он задаёт по умолчанию, не делает ничего, если только не выполнены два других условия, — именно поэтому этот параметр заслуживает нескольких сотен слов, а не одного предложения.

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

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

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


default_toast_compression определяет, какой алгоритм PostgreSQL использует для сжатия значений, направляемых в TOAST — внестрочное хранилище для значений полей, слишком больших, чтобы помещаться непосредственно на странице кучи размером 8 КБ. Доступны варианты pglz и lz4; по умолчанию во всех выпущенных на данный момент версиях используется pglz; контекст — user, и его можно переопределить для каждого столбца с помощью опции COMPRESSION в CREATE TABLE или ALTER TABLE. Параметр существует начиная с PostgreSQL 14, и более интересный факт заключается в том, что его значение по умолчанию, наконец, скоро изменится.

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

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

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


default_text_search_config определяет конфигурацию полнотекстового поиска, которую используют функции PostgreSQL для полнотекстового поиска, если вы явно не передаёте им конфигурацию. Значение по умолчанию устанавливается командой initdb на основе локали кластера; контекст — user. Конфигурация полнотекстового поиска связывает парсер (который разбивает текст на токены) с цепочкой словарей (которые преобразуют токены в лексемы — например, приводят «бегущий» к «бежать», отбрасывают стоп-слова вроде «и»), и каждый вызов to_tsvector и to_tsquery нуждается в конфигурации для своей работы. Этот параметр используется теми вызовами, которые опускают явное указание конфигурации.



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

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

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

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


Сначала о механике, поскольку она кратка: когда default_tablespace содержит что-либо, кроме пустой строки, он неявно добавляет предложение TABLESPACE к каждой команде CREATE TABLE и CREATE INDEX, в которой это предложение явно не указано, включая индекс, создаваемый для ограничений UNIQUE или PRIMARY KEY. Значение по умолчанию — пустая строка, что означает «использовать табличное пространство самой базы данных», а контекст — user. Чтобы иметь мнение об этом параметре, нужно иметь мнение о табличных пространствах, и моё, в 2026 году, таково: в основном не используйте. Мы ещё дойдём до этого. Сначала — особенности.

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

Новости за 2026-07-04 - 2026-07-10

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

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Багманов Д.Д. (Bagmanov_Dinar 20 20 28 11 39 2643
Шибаев (saah) 7 57 18 0 18 1234
Сафронов П.А. (Paulus73) 5 155 14 0 14 134
Odnokurtsev (AlFochino) 3 127 8 59 67 175
Fom (Kamchatka) 3 9 5 0 5 5634
Smirnov S. (hr) 3 28 4 0 4 1388

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

Рейтинг	 Участник (решенные задачи, время в днях)
134 Paulus73 (155, 15.028)
140 Rujan (143, 451.925)
169 Tigra1 (138, 24.441)
175 AlFochino (127, 121.400)

Продолжить чтение "Новости за 2026-07-04 - 2026-07-10"

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

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


Небольшая ручка на очень большой двери. default_table_access_method определяет метод доступа к таблицам — то есть механизм хранения, если использовать слово, которое все на самом деле подразумевают, — который получают новые таблицы, если в CREATE TABLE не указано иное. Значение по умолчанию — heap. Контекст — user. И для подавляющего большинства кластеров это значение никогда не было иным, потому что для подавляющего большинства кластеров никогда не существовало ничего другого, на что можно было бы его установить. Параметр интересен тем, что он подразумевает: уровень хранения PostgreSQL в принципе подключаем (pluggable).

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

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

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


default_statistics_target — один из наиболее рекомендуемых и наименее объясняемых параметров в PostgreSQL. Руководства по настройке говорят: «Увеличьте до 500 для хранилищ данных» с уверенностью, подобной Большой Советской Энциклопедии, и редко поясняют, что означает это число. Значение по умолчанию — 100, диапазон — от 1 до 10 000, контекст — user, и то, что это число на самом деле контролирует, — размер трёх структур, которые ANALYZE создаёт для каждого столбца. Давайте посмотрим на эти структуры.

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

Всё о GUC по порядку: семейство debug_*

Автор: Christophe Pettus, All Your GUCs in a Row: the debug_* family


Двенадцать параметров имеют общий префикс debug_, и этот префикс несёт смысловую нагрузку: это собственные средства разработки и контроля качества PostgreSQL, доступные в виде параметров времени выполнения, чтобы buildfarm и разработчики ядра могли тестировать различные участки кода без перекомпиляции. Павло Голуб (Pavlo Golub), писавший об одном из них, точно сформулировал правильную позицию: «Я никогда-никогда не прикоснусь к параметру времени выполнения с префиксом "debug" в своих производственных кластерах». В основном это правильно. Давайте разберём эти дюжину параметров по тому, что они на самом деле дают, потому что один-два из них тихо полезны, а остальные вы должны разглядывать с безопасного расстояния.

Продолжить чтение "Всё о GUC по порядку: семейство debug_*"

Когда Patroni молча удаляет ваши слоты репликации

Автор: Semab Tariq, When Patroni Silently Deletes Your Replication Slots


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

Продолжить чтение "Когда Patroni молча удаляет ваши слоты репликации"

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

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


Название немного вводит в заблуждение. deadlock_timeout — это не время, в течение которого PostgreSQL терпит взаимоблокировку, прежде чем её разорвать, — взаимоблокировки прерываются в тот же миг, как только они обнаружены. Это время, которое процесс ожидает блокировку, прежде чем PostgreSQL вообще удосужится проверить наличие взаимоблокировки. Значение по умолчанию — 1 с, контекст — superuser, и разрыв между тем, что подразумевает название, и тем, что на самом деле делает параметр, и составляет суть данной статьи.


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

Изучаем PostgreSQL вместе с Grant Fritchey: хранилище данных

Пересказ статьи Grant Fritchey. Learning PostgreSQL with Grant: Data Storage


Если вы размещаете свои базы данных на виртуальной машине (ВМ) или на каком-то большом железе, одним из наиболее узких мест, с которым вы, вероятно столкнетесь в кластерах PostgreSQL, является ввод/вывод. Когда ввод/вывод находится в центре потенциальных проблем производительности, очень важно понимать, как PostgreSQL управляет им. Я собираюсь начать прямо сейчас с того, как данные хранятся на диске. В следующей статье мы обсудим, как выполняется запись и чтение.

Прежде чем погрузиться в детали, я хочу затронуть пару вопросов, связанных с хранением данных в PostgreSQL. Во-первых, расширения. Некоторые из наиболее впечатляющих расширений напрямую связаны с хранением данных (глядя на TimeScale). Они могут изменить те основы, которые мы собираемся обсуждать здесь. Коли так, каждое из них требует отдельного обсуждения, чтобы понять, как они влияют на хранение в PostgreSQL.
Продолжить чтение "Изучаем PostgreSQL вместе с Grant Fritchey: хранилище данных"

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

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


После бездны fsync — нечто благодушное. DateStyle управляет тем, как PostgreSQL выводит даты и как разрешает неоднозначный ввод дат, и единственное, что вам действительно нужно знать о нём: оставьте его в значении ISO, а всё остальное — интересные, но маловажные детали.

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

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

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


data_sync_retry — это логический параметр, по умолчанию выключен (off), и его контекст — postmaster, так что для его изменения требуется перезапуск. Вы почти наверняка никогда его не измените. Он существует как видимый рубец от самого тревожного события, которое сообщество PostgreSQL когда-либо узнало о своих собственных допущениях относительно долговечности, и чтобы объяснить этот единственный параметр, нам придётся объяснить fsyncgate.

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