Задать вопрос
  • Как исправить ошибку запуска?

    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 комментария
  • Почему не работают снепшоты в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    But note that any database changes made by any one of these transactions remain invisible to the other transactions, as is usual for changes made by uncommitted transactions.

    https://www.postgresql.org/docs/current/functions-...
    поведение полностью соответствует задокументированному.
    Ответ написан
    Комментировать
  • Почему предлагает форматировать swap раздел?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=...

    это пожалуй основная причина и есть. Если вы уведёте систему в сон (hibernate), а затем загрузитесь в другой linux использующий тот же самый swap - вы наверняка потеряете состояние и данные из hibernate режима.
    Если вы знаете как с этим жить - сможете сделать общий swap на обе системы самостоятельно.
    Ответ написан
  • Жёсткий диск на 3тб, не удалось создать раздел, почему?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Древняя MBR таблица разметки диска упирается в 2,2ТБ (ровно 2 TiB если точнее). Вам нужно сделать таблицу разделов GPT.

    Но с поддержкой технологий у майкрософт, как обычно, всё плохо и присутствуют удивительные ограничения. Начните отсюда: https://learn.microsoft.com/ru-RU/troubleshoot/win...

    Кстати, это известное ограничение упомянуто на самом диске под словом important.
    Ответ написан
  • Как по вашему мнению рациональнее собрать дисковую систему на сервере?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    raid10 на 6 дисков, конечно, если место не поджимает. Быстро, удобно, нет извращений "ой, системный диск пустой и вообще по нулям i/o, вебовый забит под завязку, а диски под базой загружены в потолок".
    raid5 под базой зрелище зело печальное в работе.
    Ответ написан
  • Понимание PCI-ex линий?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Открываете мануал к материнке и внимательно ищете сведения о том, что куда подведено электрически, в каком количестве. Если в мануале не описано - то продолжаете упорно искать в интернетах, что куда подведено. Начните с блок-схемы чипсета.

    В частности, самый верхний M.2 вам недоступен вовсе. Потому что i7 10700k - это 10 поколение, мануал однозначно упоминает что верхний M.2 работает только при установке CPU 11 поколения (потому что слот подведён на линии PCI-E самого CPU)
    Средний M.2 отключит один из разъёмов SATA в случае использования SATA M.2. Для NVME диска нет примечаний, до 4 линий от чипсета.
    Нижний M.2 отключит два разъёма SATA при установке любого SSD в этот слот. Останутся ли у него 4 линии для PCI-E - не упомянуто, но скорей всего да.

    У чипсета линий PCI-E более чем достаточно, аж 24 штуки. К чипсету подключены два M.2, один слот PCI-E x4, один слот x1, итого на всякую прочую мелочёвку остаётся ещё 11 линий.

    учитывая количество линий на чипсете, я могу установить 1 видеокарту в режиме x16

    Верхний PCI-E подключен к CPU, а не к чипсету.
    Ответ написан
    1 комментарий
  • Что происходит в момент добавления нового столбца в БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://ru.stackoverflow.com/q/721985/203622

    Вот есть таблица с 1000 записей. В ней 9 колонок. На 3 из них есть индексы.

    На такой мелочи без разницы. Перезапись такой крохи штука быстрая.

    1. Возможно ли дозапись новой колонки в существующую структуру? Или под капотом происходит полное копирование всех данных в новую таблицу (табличное пространство?)

    В зависимости от конкретного alter table add column.
    Если вы добавляете add column score float default random() - то будем переписывать всю таблицу и перестраивать все существующие индексы.
    Если default с константой и у вас pg11 или новее - то обновим в системном каталоге описание таблицы, а саму таблицу трогать не будем.
    Если нет default (т.е. null) - то без оглядки на версию базы просто обновим описание таблицы и сами файлы таблицы трогать не будем.

    2. Происходит ли пересоздание индексов?

    да, если выполняется table rewrite

    3. Происходят ли какие-то еще важные для понимания сути работы в БД процессы?

    классическая история частых даунтаймов, что для операции нужна эксклюзивная блокировка. То есть для взятие блокировки не должно быть совсем никого, кто эту таблицу трогал в транзакции, начавшейся до alter table. Если у вас в это время работает какая-то аналитика на 10 минут или pg_dump - будут приключения, нужен statement_timeout
    Ответ написан
    2 комментария