• Можно ли роутер и коммутатор соединить двумя и более проводами, для увеличения скорости?

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

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

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

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

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

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

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

    Melkij
    @Melkij
    PostgreSQL DBA
    если кратко: https://github.com/postgres/postgres/blob/REL_15_S...

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

    Melkij
    @Melkij
    PostgreSQL DBA
    получить к ним доступ по сети

    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
    PostgreSQL DBA
    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
    PostgreSQL DBA
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=...

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

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

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

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

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

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

    В частности, самый верхний 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
    PostgreSQL DBA
    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 комментария
  • Postgresql ltree: как получить вершины (все записи без родителей)?

    Melkij
    @Melkij
    PostgreSQL DBA
    Обратите внимание, "получить записи яляющиеся вершинами" и "все записи без родителей" - это разные задачи.

    where nlevel(ltree) = 1 -- все записи состоящие из одного уровня.


    Записи без родителей - это когда у вас есть ltree "Top.Science.Space.Astronomy", но нет записи "Top.Science.Space"
    Ответ написан
    1 комментарий
  • Можно ли восстановить дамп кластера postgresql-12 на версии postgresql-10?

    Melkij
    @Melkij
    PostgreSQL DBA
    Да, в рамках возможного. Какой-нибудь create procedure ничего кроме ошибки не даст, не было такого синтаксиса в pg10. Набор простых табличек - да хоть в postgresql 8.0
    Ответ написан
    Комментировать
  • Что за магия с PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    приведение массива record к массиву композитного типа позиционное, а не символьное. Поменяйте в
    SELECT DISTINCT ON (asin) asin, price, reviews, raing

    порядок полей на совпадающий с таковым в таблице.

    убрали бы лишние подзапросы, что ли.
    (SELECT array_agg(j) FROM (SELECT DISTINCT ON (j.asin) j FROM jsonb_populate_recordset(NULL::t_best_asin_ranking_2, '[{
    "asin":"B06XH9FNH1",                                                                                                  
    "price": 1.5,                                                                                                   
    "rating": 1.5,
    "reviews": 1
    }]') j ORDER BY j.asin) r);

    вот так хотя бы.
    Ответ написан
    4 комментария
  • Как работает индекс при составном UniqueConstraint?

    Melkij
    @Melkij
    PostgreSQL DBA
    В настоящее время (pg15) уникальное ограничение может быть только btree индексом.
    Следовательно, общее для btree правило префиксного поиска. btree(a,b,c) может так же эффективно использоваться для поиска по префиксу - where a = ? или where a = ? and b = ? - но не может эффективно использоваться для where b = ? или where c = ?
    Ответ написан
    4 комментария