Skip to content

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

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


У параметра min_wal_size описание в представлении pg_settings лучше, чем в документации: «Задаёт минимальный размер, до которого можно уменьшить объём WAL». Вот и всё, что он делает. Это нижняя граница, до которой разрешено сокращать размер каталога pg_wal. При этом параметр не сохраняет ни одного сегмента WAL, который кто-либо мог бы прочитать, хотя его название подталкивает воспринимать его как настройку срока хранения.

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

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

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

Рейтинг	 Участник (решенные задачи, время в днях)
101 Paulus73 (161, 24.735)
136 Murderface_ (155, 735.414)
196 _GUERNIKA_ (118, 163.150)
213 saah (124, 72.192)
218 gmansur88 (109, 208.675)
325 junopark1 (88, 41.963)
399 NowOrNever (71, 40.120)

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

Автор		Сообщений
pegoopik 3
gennadi_s 3

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

Всё о GUC по порядку: min_parallel_index_scan_size и min_parallel_table_scan_size

Автор Christophe Pettus: All Your GUCs in a Row: min_parallel_index_scan_size and min_parallel_table_scan_size


В названиях обоих параметров есть слово «минимальный», и оба действительно задают минимальный порог. Если, по оценке планировщика, при просмотре таблицы потребуется прочитать меньше объёма, заданного параметром min_parallel_table_scan_size (по умолчанию 8MB), или при просмотре индекса — меньше объёма, заданного параметром min_parallel_index_scan_size (по умолчанию 512kB), такой вариант не будет рассматриваться для параллельного плана. Это та часть, которая описана в документации.



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

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

Почему ваш индекс не используется? Анализ планов выполнения для выявления причины

Пересказ статьи sanketparmar. Why Your Index Isn't Being Used? - Reading Execution Plans to Find the Real Culprit


Вы построили пять индексов для таблицы с 339М строками, индексы JOIN подбираются нормально, но оптимизатор игнорирует каждый созданный вами индекс для предложения WHERE. Это один из самых неприятных моментов в разработке SQL главным образом потому, что причина не является очевидной. Индекс существует. Он на правильной таблице. Так почему оптимизатор совершенно игнорирует его?

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

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

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


md5_password_warnings — это переключатель, отключающий уведомление об устаревшем механизме. В PostgreSQL 18 хеши паролей MD5 были объявлены устаревшими. С этого момента сервер выдаёт предупреждение WARNING каждый раз, когда такой хеш сохраняется в системе. В том же изменении кода появился и этот параметр, позволяющий отключить предупреждение.

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

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

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


max_wal_size — это не максимальный размер и даже не размер чего-либо, что можно измерить командой du. Это порог запуска контрольной точки, выраженный в байтах. Как только объём WAL, записанного с момента начала последней контрольной точки, достигает определённой доли этого значения, начинается следующая контрольная точка — независимо от того, наступило ли время очередного запуска по параметру checkpoint_timeout. Оба условия запуска и причины, по которым желательно, чтобы срабатывало именно временное ограничение, разобраны в статье «Экскурсия по контрольным точкам». Об этом параметре я уже писал дважды раньше. Но в тех статьях нет ни расчётов, ни измерений, ни объяснения двух способов, которыми название параметра вводит в заблуждение. Этим и займёмся сейчас.

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

Оптимизация запросов: EXPLAIN для разработчиков Python

Пересказ статьи Jamal Hansen. Optimizing Queries: EXPLAIN for Python Developers


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

По мере роста базы данных запросы начинают работать медленнее. Это ожидаемо.

Если ваши запросы постоянно выполняются медленно, сам запрос может быть проблемой.

Мы говорили ранее о том, что SQL является декларативным языком. Вы говорите базе данных, что вам нужно, и она решает, как получить это. Но вы также видите, что SQL дает вам свободу выбора среди множества способов написания запроса, и некоторые из них оказываются более эффективными, чем другие.

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

Сегодня мы рассмотрим, как решить оба эти сценария, углубившись в оптимизацию запросов. Освоение этой темы может потребовать некоторого времени и практики, но основы просты. Продолжить чтение "Оптимизация запросов: EXPLAIN для разработчиков Python"

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

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


Поправка: в статье о max_connections я рекомендовал учитывать при расчёте этого параметра «подключения репликации». Начиная с PostgreSQL 12 так делать не нужно. Для процессов отправки WAL предусмотрены собственные места в отдельном пуле, размер которого задаётся этим параметром. С версии 12 они больше не используют места, выделенные параметром max_connections. Всё остальное в той статье остаётся верным: ошибочным было только это утверждение, причём для всех версий, которые вам следует использовать.


max_wal_senders определяет количество процессов, которым разрешено читать ваш WAL в интересах других узлов. Проблема в том, что список таких «других узлов» гораздо длиннее, чем можно предположить, учитывая только резервные серверы.

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

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

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


max_sync_workers_per_subscription определяет, сколько таблиц одна подписка копирует одновременно. Это не параметр, задающий скорость первоначального копирования, хотя именно для её увеличения многие и повышают его значение. Каждый рабочий процесс синхронизации таблиц копирует ровно одну таблицу — от начала до конца. Таким образом, параметр обеспечивает параллельную обработку разных таблиц, но никак не ускоряет копирование одной отдельной таблицы. Самая большая таблица будет копироваться одинаково долго независимо от того, установлено здесь значение 2, 8 или 200. А первоначальная синхронизация подписки не завершится раньше, чем закончится копирование этой таблицы.

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

Всё о GUC по порядку: max_standby_archive_delay и max_standby_streaming_delay

Christophe Pettus: All Your GUCs in a Row: max_standby_archive_delay and max_standby_streaming_delay


max_standby_streaming_delay — это не ограничение времени выполнения запроса, какими бы ни казались его название и значение по умолчанию. Этот параметр задаёт величину отставания реплики, на которую вы готовы пойти ради выполнения запросов на резервном сервере. Когда отведённый запас исчерпан, отменяют именно запросы. max_standby_archive_delay выполняет ту же функцию для WAL, поступающего через restore_command, а не от процесса отправки WAL. Я буду рассматривать их как один параметр с двумя именами и объясню, зачем нужны оба.

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

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

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


Параметр max_slot_wal_keep_size определяет, кто погибнет, если реплика перестанет получать WAL: реплика или основной сервер. Значение по умолчанию выбирает основной сервер.

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

Проблемы соединений табличнозначного параметра в хранимых процедурах SQL Server

Пересказ статьи Mehdi Ghapanvari. SQL Server Table-Valued Parameter Join Issues in Stored Procedures


В статье Проблемы производительности при соединении временных таблиц SQL против табличных переменных я объяснял, почему следует избегать табличных переменных в операторах соединения. Проблема может стать более сложной, когда табличнозначный параметр используется в соединении в хранимой процедуре. Это происходит потому, что добавляется еще одна проблема, которая называется прослушиванием параметра (Parameter Sniffing). Если вас интересует, как решить эти проблемы, продолжайте читать, чтобы узнать больше.

Многие разработчики передают таблицу данных из приложения в хранимую процедуру. Затем они используют ее в операторе соединения (join) для фильтрации результатов. Хранимые процедуры могут получать эти данные как входной параметр при использовании табличнозначного параметра (TVP). Чтобы передать несколько строк при помощи TVP, вы должны определить пользовательский табличный тип данных. Вы можете больше узнать об этом в следующей статье.
Продолжить чтение "Проблемы соединений табличнозначного параметра в хранимых процедурах SQL Server"

Новости за 2026-10-31 - 2026-11-06

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

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

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

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Gitinomagomedov (gmansur88) 11 99 25 0 25 269
Ш С. (junopark1) 8 76 18 0 18 422
Иванова О.Н. (olga_ivanova) 10 19 13 0 13 1667
O (janeoosql) 4 36 10 0 10 1262
Timonin D.E. (DmiTim) 3 70 5 0 5 531
Продолжить чтение "Новости за 2026-10-31 - 2026-11-06"

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

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


max_replication_slots — это размер массива в общей памяти, и ничего больше. Этот параметр не определяет, кому разрешено создавать слоты, сколько WAL может удерживать слот и когда система должна очищать заброшенные слоты. Он задаёт количество элементов в массиве. Сам массив выделяется один раз при запуске сервера, поэтому единственная действительно важная особенность этого значения заключается в том, что изменить его без перезапуска невозможно.

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

Новые системные представления в PostgreSQL 19

Автор Gülçin Yıldırım Jelíenk: New system views in PostgreSQL 19


Работая над статьёй об улучшениях мониторинга в PostgreSQL 19 и готовя новый доклад о наблюдаемости PostgreSQL для конференции PostgreSQL Conference Europe, которая состоялась в октябре, я заметила, что в этом выпуске системным представлениям посвятили отдельный раздел. Последний раз им уделяли столь же заметное внимание в PostgreSQL 13 и 14. Поэтому я решила, что системные представления заслуживают отдельной статьи, в которой можно подробно разобрать все изменения.

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