• Как сделать отказоустойчивый кластер nginx в разных ЦОД-ах?

    Melkij
    @Melkij
    PostgreSQL DBA
    Дёшево - это через DNS. В комплекте приключения, на которые вы в принципе не сможете повлиять - как надолго кэшируются ответы DNS даже в нарушении заданного TTL.

    Правильно - это BGP с анонсом своего IP. Вопрос очень далеко не SOHO сегмента.

    Посередине - договориться с кем-то третьим, кто возьмётся представляться вашей точкой входа, сможет гарантировать время переключения с одного сервера на запасной (в отличии от любых DNS), а доступностью своего адреса занимается сам. Cloudflare, например, из известных.
    Ответ написан
    Комментировать
  • В postgresql параметр max_wal_size - размер всех сегментов или одного?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ни то ни другое.

    max_wal_size - пороговое значение, при срабатывании которого начинаем checkpoint. Ближайший родственник checkpoint_timeout, только checkpoint_timeout вызывает checkpoint по прошествии указанного времени с прошлого чекпойнта, а max_wal_size - после записи такого объёма WAL. Работают оба, чекпойнт начинается смотря что произойдёт раньше.
    Ответ написан
    7 комментариев
  • Golang PGX как добавлять значения в jsonb?

    Melkij
    @Melkij
    PostgreSQL DBA
    сильно сомневаюсь, что $2 и $3 тоже у вас корректно указаны с точки зрения библиотеки и их хоть кто-то будет искать внутри текстового литерала, так что так:
    UPDATE type
        SET characteristics = jsonb_insert(
            characteristics, array[$1], jsonb_build_object('type', $2, 'measure', $3)
        )
        WHERE id=$4

    или
    update type set characteristics[$1] = jsonb_build_object('type', $2, 'measure', $3) WHERE id=$4;
    Ответ написан
    1 комментарий
  • Как найти к какому коммутатору подключена розетка?

    Melkij
    @Melkij
    PostgreSQL DBA
    "посмотреть в документации" не предлагать, да? Ну вот отличный повод начать уже вести документацию.
    Ответ написан
    1 комментарий
  • Вопрос с собеседования: Есть ли в PHP нативная возможность инициализировать переменную как в функции preg_match()?

    Melkij
    @Melkij
    PostgreSQL DBA
    function foo(&$out) 
    {
    	$out = 'hello!';
    }
    
    foo($hello);
    var_dump($hello);
    Ответ написан
    Комментировать
  • Как правильно настроить pgbouncer и postregsql?

    Melkij
    @Melkij
    PostgreSQL DBA
    max_client_conn в конфиге баунсера - это максимальное число возможных подключений от клиентов к самому баунсеру.
    Если у вас max_client_conn стоит, например, 100, а каждый из 20 бекендов попробует открыть по 10 соединений с баунсером - то первая сотня подключений будет успешна, остальные получат ошибку "no more connections allowed (max_client_conn)"
    max_client_conn ставится в 10000 и про него надолго забываем. Штука фактически бесплатная, libevent хорошо умеет с таким работать. Но требуется выставить корректный open file limit. Каждый коннект - это файловый дескриптор, если не скорректировать настройки ОС - то будет неприятный сюрприз.

    Далее, max_connections базы оставить как есть. Максимум в 100 процессов базы на всего 8 ядер - это и так довольно-таки много, но и урезать смысла нет.
    max_user_connections не трогать если нет причин для этого.

    pool size 20 на всего лишь 8 ядер CPU может быть чрезмерно. Но далее нужно смотреть уже мониторинг. Сколько реальных процессов базы в работе, очередь ожиданий на баунсере, хватает ли баунсеру процессорного времени (тут скользкий момент, баунсер строго однопоточный и может упираться в производительность одного ядра CPU)
    Ответ написан
    2 комментария
  • Как увеличить размер раздела без потери данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Disklabel type: dos

    вот и есть лимит в 2ТиБ, msdos label больше не умеет.

    - делаете бекап
    - внимательно сохраняете номер стартового и конечного сектора файловой системы
    - отмонтируете раздел
    - убираете disklabel msdos, создаёте gpt
    - создаёте новый раздел начинающийся в точности на той же позиции. Конец раздела можно сразу до конца диска сдвинуть
    - монтируете раздел, проверяете что файловая система на месте
    - resize2fs
    - правите fstab если надо
    Ответ написан
    2 комментария
  • Как настроить рабочую среду для установки расширения pgTap?

    Melkij
    @Melkij
    PostgreSQL DBA
    pgxs.mk не может быть пустым. Для того он и требуется, чтобы не быть пустым. Разбирайтесь с первопричиной тут:
    Но он только для 14 версии, в у меня 15.

    если это rpm PGDG репа - то включен ли у вас -devel?
    Ответ написан
  • Реально ли разместить в корпусе U1 две материнские платы mini atx am 4?

    Melkij
    @Melkij
    PostgreSQL DBA
    Форм-фактор 1U предписывает предельные размеры по ширине и высоте корпуса. А вот по глубине простора вполне достаточно. Можно и пару ATX запихать с точки зрения геометрии без проблем. Например, одну материнку вывести front view, вторую back view. Если решите вопрос с охлаждением и общим смыслом сей затеи кастомного корпуса.
    Ответ написан
    Комментировать
  • Перемещение оперативных файлов на SSD?

    Melkij
    @Melkij
    PostgreSQL DBA
    ядерный bcache, LVM cache
    Ответ написан
    Комментировать
  • Как исправить ошибку запуска?

    Melkij
    @Melkij
    PostgreSQL DBA
    Берёте бекап и восстанавливаетесь из него.

    Затем внимательно и придирчиво задаёте вопросы софту и железу на предмет где и как продолбали fsync, где ошибка в настройках, нарушающая гарантии durability?

    А из повреждённой базы можно попробовать аккуратно достать то что ещё читается и обойти то что чтению уже не подлежит. Разумеется, не под продовой нагрузкой. Долго, дорого.
    Ответ написан
    Комментировать
  • Как реплицировать материализованное представлнеие?

    Melkij
    @Melkij
    PostgreSQL DBA
    pg15+ умеет публиковать только часть полей таблицы: https://www.postgresql.org/docs/current/logical-re...
    вычисляемые поля так, впрочем, опубликовать не получится.

    Так что старые-добрые пачка триггеров вам помогут.
    Ответ написан
    Комментировать
  • Чем загрузчик в виртуальных процессорах отличается от реального? Какой жизненный цикл запущенной ОС на виртулальном?

    Melkij
    @Melkij
    PostgreSQL DBA
    Запуститься ли обычная ос на виртуальном процессоре(не понимаю как это протестировать. так как образы ос для виртуалок, чет немного другие, а что в них другого в этом вопрос)

    Есть разные варианты виртуализации.
    Если мы виртуализируем всё железо - это предназначено именно для запуска ОС, ничего не знающей о виртуализации. Но за виртуализацию всякой периферии (вроде дисков и сети) расплачиваемся снижением производительности.
    Можно не виртуализировать периферийные устройства - но тогда гостевая система должна уметь работать с такой периферией. Если ОС не знает как работать с диском - то она банально не сможет загрузиться.
    Может вся ОС быть в режиме паравиртуализации

    Точно не все, к примеру в qemu память выделяется динамически. А значит. Ram может расти. А в реальности, я не могу взять и RAM увеличить в 2 раза по команде. Значит есть инструкция, new которая берет и из неоткуда(с точки зрения вирт ос) берет память.

    https://en.wikipedia.org/wiki/Memory_ballooning
    Ядро гостевой ОС намеренно модифицировано и знает как попросить больше памяти у гипервизора.

    То что вы упускаете: виртуального процессора не существует.
    Управление памятью же... Хе-хе. Если не сильно ошибусь в исторический экскурс, то в прошлом году исполнилось уже 50 лет с тех пор как память в x86 перестала работать так наивно, как вы описали. https://en.wikipedia.org/wiki/Virtual_memory
    malloc гигабайтного куска памяти уже очень давно не даёт гигабайтный кусок непрерывных адресов в физической RAM. Фактически, malloc сейчас вообще не даёт память, а только обещает её дать позже. Куда и как эта память будет распределена по физической RAM - да фиг его знает, этим управляет операционная система. Виртуализация соответственно возводит сложность управления виртуальной памятью в квадрат. Это может быть как двойная работа - сначала гость в том что считает своей RAM распихивает всё что есть как нравится, затем гипервизор ничего не зная о алгоритмах управления памятью в госте распихивает занимаемую гостем память по своей виртуальной памяти. Или это может быть какая-то кооперация.
    Ответ написан
    Комментировать
  • Почему PHPMailer не отправляет на gmail?

    Melkij
    @Melkij
    PostgreSQL DBA
    Проклятые гугловые инженегры ломают то что не сломано.
    1. авторизуетесь в gmail под нужной учёткой
    2. идёте в настройки security
    3. включаете двухфакторную аутентификацию каким-нибудь способом
    4. вот только тогда внезапно (!) появится новый пункт App passwords
    5. в нём создать новый App passwords с доступом к gmail
    6. использовать этот созданный пароль в приложении
    Ответ написан
    Комментировать
  • Можно ли роутер и коммутатор соединить двумя и более проводами, для увеличения скорости?

    Melkij
    @Melkij
    PostgreSQL DBA
    trunk/bonding/teaming/LACP
    https://ru.wikipedia.org/wiki/%D0%90%D0%B3%D1%80%D...

    Для вашего коммутатора заявлен LACP (802.3ad), микротик его тоже имеет. Попробуйте настроить.

    Если просто включите второй кабель без настройки - получите петлю и сеть ляжет.
    Ответ написан
    Комментировать
  • Почему колонка типа date показывает фантастические данные?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ох этот древний ужас не strict режима mysql.

    Вы зачем в поле даты пытаетесь вставить строку NOW()? Какая это дата должна быть и почему вам не нравится 1899 год?
    INSERT INTO messages(name, content, date) VALUES('${user.name}', '${user.content}',NOW())
    Ответ написан
    9 комментариев
  • Что из себя представляет должность администратора баз данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    являясь собственно DBA последние сколько-то там лет...

    Основная рутина:
    - внесение изменений схемы данных без даунтайма собственно приложения
    - выполнение каких-то массивных операций над данными (удалить половину данных из полутеррабайтной таблички, например)
    - исследование проблем производительности со стороны базы
    - решение в целом проблем на серверах баз, не только производительности
    - текущее сопровождение: бекапы, репликация, переезды с одних серверов на другие, настройка новых серверов, минорные обновления базы
    - major обновления базы
    - заведение пользователей и организация прав доступа
    - консультации разработчикам "как лучше сделать"
    - консультации "так это работать не будет, придётся менять"
    Ответ написан
    Комментировать
  • Копирование одного диска на несколько, как ускорить?

    Melkij
    @Melkij
    PostgreSQL DBA
    попробуйте для начала dd if=/dev/sda | tee /dev/sdb /dev/sdc /dev/sdd > /dev/sdc
    сходу проверить негде, но не вижу причин почему бы это не работало.

    можно так
    dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null

    чтобы был доступ к привычным опциям dd
    Ответ написан
    4 комментария
  • Верно ли утверждение, что FSM (free space map) хранит значения округленные до 1/256 от размера страницы?

    Melkij
    @Melkij
    PostgreSQL DBA
    https://github.com/postgres/postgres/blob/REL_15_S...
    We allocate one map byte to each page, allowing us to record free space
    at a granularity of 1/256th of a page. Another way to say it is that
    the stored value is the free space divided by BLCKSZ/256 (rounding down).

    один байт FSM отражает страницу данных.
    Ответ написан