Задать вопрос
  • Вопрос с собеседования: Есть ли в PHP нативная возможность инициализировать переменную как в функции preg_match()?

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    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
    DBA Team для вашего PostgreSQL?
    Disklabel type: dos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    trunk/bonding/teaming/LACP
    https://ru.wikipedia.org/wiki/%D0%90%D0%B3%D1%80%D...

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

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

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

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

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

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    попробуйте для начала 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
    DBA Team для вашего PostgreSQL?
    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 отражает страницу данных.
    Ответ написан
  • Как заменить диски в RAID 1 на диски меньшего объема?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Будут, разумеется. Как вы контроллеру предлагаете обеспечить зеркало ёмкости 500гб на накопителе меньшего объёма? Контроллер закономерно откажется использовать такой диск в массиве.

    Открываете документацию к контроллеру и ищете, есть ли в принципе возможность уменьшить размер виртуального диска. Может не быть.

    Если у контроллера есть такая возможность - то сначала делаете бекап. Потом придумываете, как уменьшить использование диска до нового порога с точки зрения ОС. Уменьшить файловые системы, разделы диска и прочее что как-то использует ёмкость виртуального диска.
    Затем делаете ещё бекап..
    Затем следуете документации контроллера по уменьшению размера виртуального диска.
    Затем меняете диск, ждёте ребилд, меняете второй диск.

    Если контроллер так не умеет - делаете второй виртуальный диск меньшего размера, переносите на него систему, старый виртуальный диск удаляете.
    Ответ написан
    4 комментария
  • Какие символы разрешены в ключах массивов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Dots and spaces in variable names are converted to underscores. For example becomes $_REQUEST["a_b"].

    https://www.php.net/manual/en/language.variables.e...

    да, это задокументированное поведение (скорей всего тяжкое наследие register_globals)

    filter_input так же сохраняет это поведение. Значит остаётся не извращаться с пробелами брать сырой php://input и парсить самостоятельно
    Ответ написан
    6 комментариев
  • Как решить проблему collation "en_US" for encoding "UTF8" does not exist?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Такой текст ошибки используется только в одном месте и суть его заключается в том, что в pg_collation нет такой строки.
    Что через https://www.postgresql.org/docs/current/collation.html приводит к вопросу: существует ли локаль en_US.utf8 у вас в системе, чтобы её использовать?

    Если нет - создайте локаль. Затем select pg_import_system_collations('public'); должно быть достаточно
    Ответ написан
    3 комментария
  • Как работает блокировка в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    если кратко: https://github.com/postgres/postgres/blob/REL_15_S...

    только требуемые строки, в select for update (и родственниках) это видно отдельным LockRows плана выполнения
    Ответ написан
    Комментировать
  • Как создать RAID-хранилище из старых SATA HDD?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    получить к ним доступ по сети

    NAS (Network-attached storage)

    или по USB

    DAS (Direct-attached storage)
    DAS очень слабо распространены даже по сравнению с NAS.

    Мне не разглядеть на картинке, какие объёмы дисков. Заводские с большой вероятностью будут испытывать трудности с организацией массива из дисков разного объёма - например, возьмут меньший из дисков, превышающая ёмкость остальных останется неиспользуемой. Ну и даже лишь скромные 5 дисков уже часто нарекают бизнес-сегментом с более чем кусающимся ценником. Как-то тут на q&a подсчитывали, что дешевле взять USB хаб с внешним питанием и пяток usb адаптеров для 2,5" дисков (как у вас), чем покупать контроллер на 5 дисков... (к слову, да, один новый большой HDD вполне может быть дешевле чем пристраивать 5 маленьких)

    Самостоятельно собранные nas на десктопных комплектующих - штука не такая уж редкая. Ещё бывают всякие смешные игрушки на ARM
    Ответ написан
    4 комментария