BitPage

Базы данных

PostgreSQL, ClickHouse, MySQL. Миграции, оптимизация, разбор инцидентов, экранирование и типовые грабли.

3 статьи

Место на диске съели индексы, а не данные: раздувание b-tree, которое autovacuum не лечит

Дисковый алерт на базе PostgreSQL чаще означает раздувание индексов, а не таблиц: b-tree не сливает полупустые страницы, и плотность вместо дефолтных 90% падает до 13–15%. Autovacuum тут бессилен by design — помогает только REINDEX, а VACUUM FULL при нехватке места опасен, потому что пишет вторую копию таблицы целиком.

Patroni игнорирует правки patroni.yml: почему bootstrap.dcs работает один раз и как вернуть Ansible-роли управление кластером

Секция bootstrap.dcs в patroni.yml применяется один раз — при инициализации кластера, дальше правки шаблона не действуют. Разбор четырёх разошедшихся слоёв конфигурации, перенос в postgresql.parameters всего, кроме полутора десятков параметров из CMDLINE_OPTIONS, и грабли: shared_buffers: 4G молча превращается в 128 МБ после рестарта.

PostgreSQL conflict with recovery: почему hot_standby_feedback со слотами опасен, а lag= в Patroni мерит не то

Реплика отдавала около двух сотен конфликтов recovery за полторы недели и три десятка раз выпадала из HAProxy. hot_standby_feedback при включённых слотах переносит проблему на мастер, рост max_standby_streaming_delay усиливает флап. Реальное отставание — единицы миллисекунд по медиане и пара секунд в худшем случае — против порога health-check в 10 МБ.