Skip to content

Всё о GUC по порядку: commit_delay и commit_siblings

Автор: Christophe Pettus, All Your GUCs in a Row: commit_delay and commit_siblings


commit_delay — это та единственная настройка, которая говорит групповой фиксации (group commit) PostgreSQL ждать более многочисленной группы. База данных уже сама группирует сбросы WAL: когда один фоновый процесс выполняет сброс WAL, другие, готовые к фиксации, выстраиваются за ним и присоединяются к тому же fsync. commit_delay заставляет процесс, инициирующий этот сброс, сделать паузу на заданное количество микросекунд перед его началом, в предположении, что за время паузы подойдут ещё несколько транзакций и присоединятся к группе. commit_siblings — это сторожевой параметр, который решает, стоит ли вообще делать эту паузу.

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

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

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


cluster_name выглядит как косметический параметр: метка, которая отображается в выводе ps, чтобы вы могли различать свои три экземпляра Postgres. На первичном сервере это всё, что он делает. На резервном сервере (standby) он может незаметно стать именем, которое первичный сервер использует, чтобы определить, удовлетворена ли синхронная репликация, — это гораздо более серьёзная задача для параметра, который большинство людей устанавливают и забывают.

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

Восстановление журнала транзакций базы данных SQL Server

Пересказ статьи davidfowler. Rebuilding a SQL Server Database Transaction Log


"Не могли бы вы помочь мне, мы удалили файл журнала транзакций базы данных и теперь она застряла в ‘Recovery Pending’?"

Такой крик о помощи я получил пару недель назад.

"Конечно, без проблем, нам придется восстановить вашу последнюю резервную копию", - ответил я.

А потом неизбежное: "Это только база данных разработки, мы не делаем резервных копий."

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

Итак мы имеем следующую ситуацию: база данных недоступна, отсутствует журнал транзакции и нет резервной копии. Что можно сделать? Фактически у нас есть только один вариант - мы должны восстановить журнал транзакций.
Продолжить чтение "Восстановление журнала транзакций базы данных SQL Server"
Категории: T-SQL

pretty_explain_*: как сделать планы запросов PostgreSQL читаемыми и стабильными для тестов

Автор: Andrei Lepikhov, EXPLAIN Prettier, or Post-Processing Query Plans in Postgres


Эта история началась с книги, подаренной коллегой. Читая книгу Джимми Ангелакоса «PostgreSQL Mistakes and How to Avoid Them», я осознал одну вещь, которая давно меня беспокоила: в Postgres команда EXPLAIN выдаёт слишком много информации. Примеры, которые авторы обычно приводят при обсуждении различных аспектов систем баз данных, усложняют анализ рассматриваемой проблемы и отвлекают читателя. Так родилась идея пост-обработки вывода EXPLAIN — чтобы сделать планы запросов более читаемыми и сфокусированными на проблеме.

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

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

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


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


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

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

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


client_encoding объявляет, в какой кодировке символов говорит клиент. Сервер использует этот параметр для преобразования между своей внутренней кодировкой (устанавливается во время initdb, для каждой базы данных, часто UTF-8) и тем, что клиент отправляет и ожидает получить. Значение по умолчанию — «the server’s encoding», то есть без преобразования. Контекст параметра — user, с переменной окружения PGCLIENTENCODING, которую libpq учитывает автоматически, по аналогии с application_name.


В мире UTF-8 этот параметр редко проявляется. Сервер — UTF-8, клиент — UTF-8, преобразования не происходит, жизнь хороша. Но «редко проявляется» — это не то же самое, что «не существует», и случаи, когда он проявляется, стоят понимания.


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

Новости за 2026-06-13 - 2026-06-19

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

	Участник		w_sel	all_sel	select	dml	Всего	Рейтинг
Шибаев (saah) 13 37 18 0 18 1789
Сафронов П.А. (Paulus73) 5 139 17 0 17 139
Быков (EvgenyAstro) 10 10 15 11 26 4131
Виноградова С.М. (Tigra1) 3 135 8 0 8 182
Макаров И.А. (_Bkmz_) 1 180 5 0 5 49
P I.*. (IrinaPetr) 3 81 5 0 5 608
Gitinomagomedov (gmansur88) 4 52 5 0 5 1052
Odnokurtsev (AlFochino) 1 122 4 0 4 256

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

Рейтинг	 Участник (решенные задачи, время в днях)
139 Paulus73 (139, 11.160)
141 Rujan (143, 451.925)
182 Tigra1 (135, 22.569)
Продолжить чтение "Новости за 2026-06-13 - 2026-06-19"

Всё о GUC по порядку: checkpoint_flush_after и checkpoint_warning

Автор: Christophe Pettus, All Your GUCs in a Row: checkpoint_flush_after and checkpoint_warning


Два параметра, смежных с контрольными точками, объединённые алфавитной близостью, а не тематическим родством. checkpoint_flush_after — третий из четырёх параметров *_flush_after для выталкивания (writeback); checkpoint_warning — это журнальный параметр, который выводит предупреждение, когда контрольные точки срабатывают слишком часто. Разные задачи, разная аудитория, но ни один из них не требует 400 слов отдельно.

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

Всё о GUC по порядку: checkpoint_timeout и checkpoint_completion_target

Автор: Christophe Pettus, All Your GUCs in a Row: checkpoint_timeout and checkpoint_completion_target


Кластер параметров на букву C открывается первыми двумя параметрами контрольных точек. Мы выводим их из алфавитного порядка, потому что checkpoint_completion_target определён как доля от checkpoint_timeout и не имеет смысла без него. Алфавит может подождать одну статью.

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

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

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


Параметр, о котором большинство операторов никогда не знали, хотя каждый дамп-файл PostgreSQL, который они когда-либо просматривали, устанавливает его. check_function_bodies управляет тем, проверяет ли PostgreSQL тело функции при создании CREATE FUNCTION или CREATE PROCEDURE. Значение по умолчанию — on. Контекст параметра — user.

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

Иерархические типы данных

Пересказ статьи Florent Jardin. Hierarchical data types


Стандарт SQL определяет ряд правил, которые позволяют системам баз данных быть взаимозаменяемыми, но в реальности есть небольшие особенности. В этой связи тип данных hierarchyid в SQL Server является показательным примером. Если вы перейдете на PostgreSQL, вам будут доступны два решения.

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

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

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


bytea_output управляет тем, как PostgreSQL форматирует двоичные данные при отправке клиенту. Два значения: hex (значение по умолчанию, начиная с PostgreSQL 9.0, вышедшего в 2010 году) и escape (традиционный формат, уходящий корнями в начало 2000-х). Контекст параметра — user. Параметр влияет только на вывод — ввод bytea принимал оба формата всегда, и установка SET bytea_output ничего не меняет в том, как вы записываете литеральные значения.

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

Всё о GUC по порядку: bonjour и bonjour_name

Автор: Christophe Pettus, All Your GUCs in a Row: bonjour and bonjour_name


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

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

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

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


Параметр, который вы не можете изменить. block_size находится в разделе «Предустановленные параметры» (Preset Options) документации, вместе со своими «кузенами» только для чтения, такими как data_checksums, wal_block_size и server_version. Он сообщает размер страницы PostgreSQL — фундаментальной единицы хранения на диске и учёта в буферном пуле. Значение по умолчанию — 8192 байта. Он доступен только для чтения во время выполнения, может быть установлен только во время компиляции PostgreSQL, а его изменение после создания кластера означает, что нужно начать всё заново с новым кластером.


Так зачем же он вообще в pg_settings? Потому что всё в базе данных измеряется в единицах этого размера.

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

Методы разбиения на страницы в SQL: повышение производительности запросов и эффективное управление памятью

Пересказ статьи Pradip Bhusnar. SQL Pagination Techniques: Enhancing Query Performance and Managing Memory Efficiently


Эффективная обработка разбивки на страницы (пагинация) в SQL, особенно в высоконагруженных системах, требует тщательного учета как использования памяти, так и производительности. Здесь представлен детальный обзор проектирования и эффективного применения запросов постраничной разбивки.

Основные методы эффективной разбивки на страницы в SQL


1. Limit и Offset:

  • Традиционная разбивка на страницы с использованием LIMIT и OFFSET проста, но может оказаться неэффективной при больших смещениях.

  • Например:

    SELECT * FROM data_table
    ORDER BY timestamp DESC
    LIMIT 10 OFFSET 1000;

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

Продолжить чтение "Методы разбиения на страницы в SQL: повышение производительности запросов и эффективное управление памятью"