Задать вопрос
  • Почему увеличилась генерация WAL-сегментов?

    Melkij
    @Melkij
    Есть такая штука как full page image (FPI) - при первом изменении страницы после чекпойнта записывается в WAL копия всей страницы, а не только изменение этой страницы. (это защита для crash recovery на тот случай, если IO записало страницу только частично, страница у нас 8кб типично, страница памяти ОС чаще 4кб, а у диска адресация может быть и 512 байт: поэтому нужно предполагать, что есть ли мы попросили записать 8кб и где-то тут всё умерло, то на дисках может быть уже записано, например, 4кб нового содержимого страницы, а других 4кб остались старые - в итоге фигня)

    Вместе с накоплением bloat получается что мы регулярно трогаем бОльшее число разных блоков, что и вызывает больше записи FPI.
    https://wiki.postgresql.org/wiki/Full_page_writes

    Из менее очевидного и не помню чтобы задокументированного (помимо исходников), часть работы автовакуума подхватит выполнение других запросов. Так называемые micro vacuum и index hint bits, когда даже select может чего-нибудь писать в WAL. Небольшие оптимизации вида "ну это не моя работа, я выполняю запрос, но блок данных вот он в руке, всю работу по проверке видимости транзакций всё равно уже сделал, подпишу для потомков примечания чтобы они не тратили время на то же самое"

    Ситуация вокруг hot_standby_feedback или max_standby_streaming_delay (max_standby_archive_delay полностью аналогично, но применяется на restore_command) в postgresql такая:
    Реплика получает поток WAL, сделанных на мастере и обнаруживает, что на мастере физически из датафайла удалены данные (обычно автовакуумом), которые ещё может хотеть прочитать запрос, запущенный на этой реплике. Пропустить это изменение и накатывать репликацию дальше нельзя. Дальнейшшие изменения запросто могут быть в этом же самом датафайле, уже полагающиеся что это изменение было применено. Остаётся не так уж много вариантов что может делать реплика:
    • или приостанавливать репликацию и подождать пока доработает запрос
    • или отменять запрос и продолжать применять репликацию
    postgresql сначала делает паузу репликации, затем по прошествии времени max_standby_streaming_delay отменяет мешающие запросы с разными вариантами terminating connection due to conflict with recovery. При этом, max_standby_streaming_delay считается от начала конфликта репликации и по таймауту снимает совсем всех кто мешает, даже если этот конкретный запрос запустился полсекунды назад.

    hot_standby_feedback же это третий вариант работы, он предписывает реплике отправлять на мастер сведения о своей самой старой транзакции. Мастер это учитывает в своей работе и не удаляет данные, которые потенциально та транзакция может ещё запросить. То есть активно мешает оперативной работе автовакуума, от чего копятся ненужные версии строк в таблицах и индексах, занимают место и замедляют обработку всех запросов, и на мастере и на всех физических репликах (т.к. запрос должен проверить, вдруг эта версия строки видна именно ему)

    Для аналитической реплики выбирается комфортный max_standby_streaming_delay. Полчаса, час, 10 часов - индивидуально по потребностям проекта. Баланс между "дать запросам поработать" и "реплика может отставать на такое время и это не авария, а полностью штатное поведение, о котором мы с вами ранее договорились"
    Написано
  • Почему увеличилась генерация WAL-сегментов?

    Melkij
    @Melkij
    hot_standby_feedback бизнес потребовать не мог. Это не бизнесовая задача. Выстрел себе в ногу в попытке починить сломавшийся или нестабильно работающий бизнес-процесс - да. Но бизнесовая проблема 100% в другом и не формулируется как "включить hot_standby_feedback".

    За счет того что автовакууму обрабатывать больше мертвых версий строк или не только?

    не только, но первопричина вернётся к этому.
    Повезёт если бонусом не ляжет вообще всё из-за замедления ответов СУБД. Некоторые проекты красиво складываются минут за 20.
    Написано
  • Postgres Docker: Странные временные файлы в папке overlay2?

    Melkij
    @Melkij
    это НЕ файлы postgresql. Не то место, не то именование.
    может быть malware работающий через взломанный postgres.
    Написано
  • Как запустить mysql после ошибки?

    Melkij
    @Melkij
    не, тут гораздо интереснее чуть выше Operating system error number 11 in a file operation.
    то есть ошибка вовсе не самого mysql, а ОС не даёт работать.
    Написано
  • Какое отставание MySQL Slave от MySQL master считать проблемным?

    Melkij
    @Melkij
    Seconds_Behind_Source но с учётом прочтения описания документации по этому полю. Там не без некоторых нюансов
    Написано
  • Как понять почему размер БД вырос на 30%?

    Melkij
    @Melkij
    3. Да были ошибки в логах о недоступности для записи таблиц.

    можно пару цитат?

    То есть основная гипотеза, vacuum full писал что-то большое, но не смог удалить либо старые либо новые датафайлы.
    База при этом не уходила ли вообще в crash recovery по какой-то причине? Там есть варианты при которых остаются осиротевшие датафайлы https://www.cybertec-postgresql.com/en/orphaned-fi...
    Написано
  • Как понять почему размер БД вырос на 30%?

    Melkij
    @Melkij
    - место занимает именно PGDATA/base/ ? PGDATA/pg_wal нормального размера?
    - "Если сделать бэкап и развернуть на другом сервере" - какой именно бекап имеется в виду?
    - ошибки в логах базы при снапшоте?
    - как именно снапшот делался? (LXC на btrfs/zfs/etc тоже можно назвать виртуалкой, а вот грабли будут свои)

    PS: vacuum full на 1,4тб базе это довольно неожиданная идея
    Написано
  • В чем может быть причина сброса значения sequence в БД?

    Melkij
    @Melkij
    если бы типичный в такой ситуации `select setval` ещё бы считался ddl командой =) не попадёт в лог, проверил только что
    Написано
  • Как обнаружить все битые таблицы?

    Melkij
    @Melkij
    Я пару файлов уже скопировал с прода и они заработали.

    И тем самым сломали MVCC логику.
    А ещё могли не заметить существование base/121622383/622439194.1 и так далее сегментов

    Восстановите базу заново но теперь корректно. Нафига вам на тестовой базе приключения
    Написано
  • Как заставить нормально работать относительно древнюю видеокарту в слоте PCIe x1?

    Melkij
    @Melkij
    проблема скорее софтовая. Когда там nvidia выбросила поддержку 8ххх из драйвера? Существовала ли в истории версия драйвера, которая поддерживает и старую и новую из ваших видеокарт?
    Два одновременно активных разных версии драйвера ожидаемо к приключениям.
    https://forums.developer.nvidia.com/t/setting-up-t...
    попробуйте вот такое для эксперимента
    https://forums.developer.nvidia.com/t/intalling-tw...
    Написано
  • С чего начать изучение инженерной части БД?

    Melkij
    @Melkij
    лучше привыкать читать технические тексты на английском. Не так сложно, как кажется со стороны.
    Написано
  • Linux udev перепутал имена сетевых карт?

    Melkij
    @Melkij
    посмотрите что dmesg про них писал. Сюда влезли ручки всякого systemd и сломали ранее исправно работавшее именование интерфейсов через udev при конфликтующих именах, когда надо поменять местами два имени между собой. Помогает использование имён не ethX, а, например, NAME="ethbond0" или NAME="ethlan"
    Написано
  • Почему для триггера AFTER INSERT FOR EACH ROW ошибка: отношение "new" не существует?

    Melkij
    @Melkij
    NEW и OLD в триггерах - это предварительно объявленные переменные типа record.
    select from не предполагает использование переменной в from и пытается искать таблицу/view/etc с таким именем.
    Написано
  • Возможно ли вывести диалог с выбором да/нет до запуска установщика Debian?

    Melkij
    @Melkij
    Есть d-i preseed/early_command из которого должна быть возможность вызвать debconf

    Что-то вроде такого https://askubuntu.com/a/353566
    Написано
  • Видеокарта не работает с более чем 3 Gb Ram?

    Melkij
    @Melkij
    поищите в BIOS что-то типа Memory Remap on/off
    Написано
  • Как определить причины низкой производительности postgres?

    Melkij
    @Melkij
    Начать снимать метрики io latency и рисовать их графики, раз их нет.
    idle сессии не интересны.
    Написано
  • Почему при установлении явного разрешенного ip в postgresql.conf перестает работать подключение?

    Melkij
    @Melkij
    Что означает "Перестаёт работать"? Если отказывается стартовать, то с какой формулировкой. Если стартует, то, опять же, что в логах и в чём выражается "Перестаёт работать"
    Написано
  • Почему возвращается ошибка database "uchet" does not exist?

    Melkij
    @Melkij
    Security through obscurity мало того что бессмысленный, так вы сами себя им и запутали.

    Не понятно почему два разных списка.

    Потому что это два разных postgres'а.

    Создавал базы так:

    Соответственно, не в том postgresql о котором думали, но не проверили, к какому именно подключаетесь.

    Развели бардак и закономерно потеряли что у вас где. Соберите бардак воедино в нормальный 5432, а безопасность обеспечить нормальным закрытием порта через firewall.
    Плюс revoke all on database .. from public;
    Написано
  • Почему возвращается ошибка database "uchet" does not exist?

    Melkij
    @Melkij
    Где именно и как именно создали базы? Внимание на себя обращает нестандартный порт. Значит чего-то нестандартного навертели уже. И стоит начать с вопроса, а сколько экземпляров postgresql вообще запущено, не запутались ли сами в том что уже навертели.
    Написано