• Как распарсить вывод ifconfig/ip, чтобы показывало имя интерфейса, отвечающее за беспроводную сеть?

    Melkij
    @Melkij
    PostgreSQL DBA
    Это должны быть те /sys/class/net/*, у которых существует /sys/class/net/$iface/wireless
    Ответ написан
    Комментировать
  • Есть ли разница в дисках для NAS?

    Melkij
    @Melkij
    PostgreSQL DBA
    HDD - это расходники. Нет смысла обсуждать "меньше" или "больше" проживут. Сдохнут гарантированно. Если повезёт, то ещё в гарантийный период - бесплатно поменяете.

    Для SOHO разница между линейками по большей части неважна. Вот что стоит уточнить - SMR или CMR диск и готовы ли с этим мириться. Достаточную ли вам предлагают скидку за террабайт, чтобы вляпываться в SMR. В одной и той же линейке дисков могут быть одновременно и SMR и CMR диски, уточнять нужно модели.
    Далее, скорость вращения диска. 7200 чуть быстрее, 5400 медленнее но их попроще охлаждать в среднем. Различие скорости для личной медиатеки скорей всего неважно, но на достаточно хорошем интернет-канале торренты могут заметно озадачить массив количеством IO.

    Зеркало будет надежно или лучше пожертвовать местом и сделать raid5 или 6?

    Звучит как полное непонимание вопроса. Каким местом жертвовать, если именно зеркало даст меньше всего форматируемую ёмкость массивов? Местом придётся жертвовать, если делать как раз зеркало.
    На примере шести 10ТБ дисков для удобства счёта, из 60ТБ RAW ёмкость массива:

    raid0 или JBOD - дадут вам все 60ТБ, выпадение любого диска фатально.
    raid1 - зеркало - даст вам как максимум 3 массива по 10ТБ, до 30ТБ форматируемой ёмкости. В каждом массиве соответственно можно потерять по соседнему диску. То есть хранилка выпадение одного любого диска переживёт, выпадение второго диска - смотря какому из дисков не повезёт. Можно потерять один из массивов полностью. (raid1 на всех 6 дисках вряд ли входит в вопрос, 10ТБ итоговой ёмкости, но чтобы их потерять из-за отказа диска нужно чтобы отказали все 6 дисков)
    raid5 - даст вам 50ТБ форматируемой ёмкости. Переживёт выпадение одного любого диска, выпадение второго диска - фатально для всего массива.
    raid6 - ближайший родственник raid5 - даст вам 40ТБ ёмкости. Но зато гарантированно переживёт выпадение любых двух дисков. Только отказ третьего будет фатален для массива.
    raid10 - даст вам 30ТБ ёмкости как raid1, гарантированно выдержит выпадение одного диска, в идеале может работать на только половине дисков массива но критично зависит от структуры raid10, какие именно номера дисков могут быть потеряны без краха всего массива. Отказ второго диска может оказаться фатален. Используется не когда нужна ёмкость или возможность пережить несколько выпавших дисков, а когда нужна производительность, особенно на запись. То есть вряд ли ваш случай.

    Что ещё надо упомянуть - вот диск из массива умер, сколько времени вам нужно это заметить, купить новый на замену, заменить? Плюс на таких объёмах займёт ещё сутки-двое-трое на восстановление массива. Вот тут причина, почему существует RAID6, хотя он по ёмкости хуже RAID5 и не лучше по производительности - пока у вас массив деградировал до 5/6 дисков, он переживёт выпадение ещё одного из дисков пока вы ставите замену и массив восстанавливается.
    Ответ написан
    Комментировать
  • Почему большой iowait в cloud vm c postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    У яндекса весьма медлительные сетевые диски, совершенно верно. Именно по latency, что куда более критично для СУБД чем обещанная полоса пропускания или IOPS (которые у большинства хранилок предполагают совершенно абсурдную для СУБД глубину очереди команд).
    Ответ написан
    2 комментария
  • Нужно ли стремиться обнулять переменные и по возможности не создавать их копий в проектах php?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ведь когда мы создаем переменную, то в нее копируется значение другой переменной и мы работаем с копией

    Неа. См. zval

    Начав работать с языком Go начал придавать значение экономии памяти - не создавать лишних переменных.

    Разве компилятор go недостаточно умён для элементарных оптимизаций кода?
    Вы проверяли байткод, ваша оптимизация действительно имеет место или это самообман?
    Ответ написан
    5 комментариев
  • Какой кабель DP - DVI нужен для 120/144Гц?

    Melkij
    @Melkij
    PostgreSQL DBA
    Since DisplayPort dual-mode operates by using the pins of the DisplayPort connector to send DVI/HDMI signals, the 20-pin DisplayPort connector can only produce a single-link DVI signal (which uses 19 pins). A dual-link DVI signal uses 25 pins, and is therefore impossible to transmit natively from a DisplayPort connector through a passive adapter. Dual-link DVI signals can only be produced by converting from native DisplayPort output signals with an active conversion device.

    https://en.wikipedia.org/wiki/DisplayPort

    О, мне гугл дал ссылочку именно про ваш монитор: https://forums.tomshardware.com/threads/how-to-con...
    В общем, или жить дальше на 60гц или дорогой активный преобразователь сигнала или замена монитора
    Ответ написан
  • Кластер postgres не инициализирует настройки?

    Melkij
    @Melkij
    PostgreSQL DBA
    Some of the PostgreSQL parameters must hold the same values on the primary and the replicas. For those, values set either in the local patroni configuration files or via the environment variables take no effect. To alter or set their values one must change the shared configuration in the DCS. Below is the actual list of such parameters together with the default values:
    max_connections: 100
    max_locks_per_transaction: 64
    max_worker_processes: 8
    max_prepared_transactions: 0
    wal_level: hot_standby
    track_commit_timestamp: off

    https://patroni.readthedocs.io/en/latest/patroni_c...
    всё выглядит штатно, как задумано разработчиками patroni
    Ответ написан
    3 комментария
  • Как забрать с раздела 500ГБ и передать их другому разделу?

    Melkij
    @Melkij
    PostgreSQL DBA
    resize2fs /dev/centos/home с указанием размера файловой системы с каким-то запасом, до 400ГБ например обрезать. Критично следующим шагом не обрезать часть файловой системы.
    lvresize /dev/centos/home до желаемого размера
    lvresize /dev/centos/root до желаемого размера
    resize2fs /dev/centos/home
    resize2fs /dev/centos/root
    Ответ написан
    4 комментария
  • Почему не удалось перенести базу zabbix?

    Melkij
    @Melkij
    PostgreSQL DBA
    1. запустили намеренно pg_dump с отказом -O - то есть --no-owner
    2. развернули дамп от супера
    3. все объекты теперь ожидаемо принадлежат суперу, owner'а же не переносили
    4. удивляемся, что постороннему пользователю нет прав чтения

    Что же тут могло пойти не так?

    Самое простое для баз с одним пользователем - импортируйте дамп базы от имени этого самого пользователя. Если в базе есть какие-то extension - то сперва их создать от суперпользователя.
    Ответ написан
    3 комментария
  • Как pgbouncer обрабатывает idle сесии?

    Melkij
    @Melkij
    PostgreSQL DBA
    Зависит от pool_mode.

    В режиме session баунсер прозрачен для приложения: не налагает каких-то явных ограничений на использование, но один клиент к баунсеру = один коннект к базе. Соединение с базой сможет быть передано другому клиенту только после того как предыдущий клиент отключится. Поэтому этот режим используется очень редко.

    В режиме transaction пула коннект к базе выдаётся клиенту только на время транзакции. Самый распространённый режим работы, любим именно за то, что сколько бы тысяч коннектов не открыло приложение к баунсеру, на базе открыто небольшое число действительно потребовавшихся соединений.
    Но этот режим пула налагает ограничения на работу приложения. Вы не сможете нормально использовать ничего, что меняет состояние коннекта, потому что следующий ваш запрос с высокой вероятностью попадёт в другой коннект. То есть курсоры, временные таблицы, set (кроме set local), prepared statements (где parse, bind и execute могут разойтись по 3 разным коннектам)

    С prepared statements в transaction pool mode с недавних пор может помочь настройка max_prepared_statements, но только если prepare и deallocate выполняются именно командами протокола, но не SQL запросами. Тут многие широкоиспользуемые библиотеки оказались в пролёте.
    Ответ написан
    1 комментарий
  • Можно ли всем строковым полям задавать тип TEXT и повлияет ли это сильно на производительность?

    Melkij
    @Melkij
    PostgreSQL DBA
    text и varchar - это одно и то же на уровне реализации postgresql.

    varchar с каким-то разумным ограничением (не бессмысленный взятый с потолка 255 везде, а разумный для этого конкретного поля) тем не менее смысл имеет: куда проще найти ошибку в месте записи данных, чем потом искать, откуда в поле обычно содержащем до 30 символов взялось 10 мегабайт текста (история из практики, да)

    Про char ограничусь цитатой письма Tom Lane
    Type character(N) is a hangover from the days of punched cards. Don't use it.

    Просто забудьте про такой тип данных. Он не только бесполезен, но и вреден.
    Ответ написан
    5 комментариев
  • Как настроить слоты репликации в patroni для сохранения неограниченного кол-ва WAL при отключении реплики?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если wal_status становится lost - значит max_slot_wal_keep_size был изменён с дефолтного значения -1 и установлен в какое-то другое значение.
    Потому что именно для этого добавляли настройку max_slot_wal_keep_size, чтобы отставший слот репликации не ронял базу.
    Ответ написан
  • Какой из WD HDD выбрать в рабочую станцию?

    Melkij
    @Melkij
    PostgreSQL DBA
    Любой. Это расходник.

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

    Melkij
    @Melkij
    PostgreSQL DBA
    Нет, ни одно из утверждений не является верным.

    btree индекс - это структура, располагающаяся отдельно, сбоку, от таблицы. Порядок данных в таблице никак не меняется от создания индекса.
    Индекс btree(a,b,c) и три индекса btree(a), btree(b), btree(c) - разные вещи.
    Ответ написан
    6 комментариев
  • Можно ли на горячую обесточивать HDD SATA и SAS?

    Melkij
    @Melkij
    PostgreSQL DBA
    Стандарт SATA изначально требует поддержку hot swap. Но конечно могут быть нюансы для конкретных реализаций диска, контроллера или ОС.

    В linux имеет смысл скомандовать echo 1 > /sys/block/(device)/device/delete перед отключением питания. Ядро сбросит буфера и скомандует остановку шпинделя диску.
    Ответ написан
    Комментировать
  • Какой максимальный размер temp_buffers для PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    Максимум INT_MAX / 2 числа блоков, что при обычном размере блока в 8кб будет равняться лимиту до 8TiB.
    melkij=> set temp_buffers to '8192GB';
    ERROR:  1073741824 8kB is outside the valid range for parameter "temp_buffers" (100 .. 1073741823)
    melkij=> set temp_buffers to '8191GB';
    SET


    Действует независимо для каждого процесса базы. При max_connection = 100 каждый из этих 100 процессов имеет возможность выделить по столько памяти для хранения блоков временных таблиц этой сессии.
    Ответ написан
    Комментировать
  • Как решить ошибку пула соединений к PostgreSql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Пока выглядит, что пул коннектов вы не используете вообще, а открываете по новому соединению на каждом действии. Проверьте документацию к этой библиотеке, есть ли встроенный пул коннектов и как именно им нужно пользоваться.

    remaining connection slots are reserved for non-replication superuser connections

    означает, что у базы заняты все возможные max_connections - superuser_reserved_connections, поэтому не может принимать больше коннектов, пока не отключится кто-то из подключившихся ранее (либо не будет обнаружен обрыв tcp сессии и поэтому коннект будет освобождён).
    Ответ написан
  • Как избежать ошибки запрошенный segment wal уже удалён?

    Melkij
    @Melkij
    PostgreSQL DBA
    wal_keep_size размером больше ожидаемого лага репликации по объёму wal (это место будет занято постоянно, зато из-за этого не угрожает уронить мастер по переполнению диска)

    либо использовать слоты репликации. Очень желательно с разумным max_slot_wal_keep_size, чтобы забытый слот репликации умер, а не уронил мастер по исчерпанию места на диске.

    либо архив wal, но если не нужен для других задач, то чаще используется wal_keep_size или слоты репликации
    Ответ написан
  • Postgres потоковая репликация Master-Slame как очиcтить архив wal?

    Melkij
    @Melkij
    PostgreSQL DBA
    Нафиг вам вообще archive_command, если нужна только потоковая репликация?

    Архив wal - это когда нужен point in time recovery либо особые случаи file shipping репликации (например, нужна реплика где-то без возможности подключиться к мастеру по сети)
    Ответ написан
    5 комментариев
  • Postgres Логическая репликация, почему не идёт репликация?

    Melkij
    @Melkij
    PostgreSQL DBA
    The schema definitions are not replicated, and the published tables must exist on the subscriber.

    https://www.postgresql.org/docs/current/logical-re...
    По-моему, написано однозначно и не допускает вариантов прочтения. Нет?

    | psql

    иначе говоря, где вы создали таблицы и где потом пытаетесь create subscription делать. Это явно два разных места.
    Ответ написан
    Комментировать
  • Максимальная частота ОЗУ ddr5 5200 AMD?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если посмотреть спецификации, то будет видно что про материнки так и пишут OC, например
    Support for DDR5 7200(OC)/ 6800(OC)/ 6600(OC)/ 6400(OC)/ 6200(OC)/ 6000(OC)/ 5600(OC)/ 5200/ 4800/ 4400 MT/s memory modules

    OC = overclock, то есть разгон.

    При том, интел или амд без разницы
    14th and 13th Generation Intel® Core™ i9/i7 Pocessors:
    - Support for DDR5 7600(O.C.) /7400(O.C.) /7200(O.C.) /7000(O.C.) /6800(O.C.) /6600(O.C.) / 6400(O.C.) / 6200(O.C.) / 6000(O.C.) / 5800(O.C.) / 5600 / 5400 / 5200/ 4800/4400 MT/s memory modules


    Оба основных производителя CPU давно занижают спецификации памяти.
    Ответ написан