Задать вопрос
  • Какая БД лучше работает с репликацией master-master?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    с репликацией master-master

    Выбираем в первую очередь между PostgreSQL и MongoDB

    А вы специально выбираете между СУБД в которых мультимастера штатно вообще нет?

    Если вы подразумеваете какие-то расширения или форки - то и называйте именно их. Один критерий который вам надо проверить вы придумали сами. Допустимое ограничение на лаг тоже назвали. Второй критерий - четко определите своё понимание "корректная". В момент времени t строка обновилась, в момент времени t+1мс та же самая строка обновилась ещё раз на другом сервере. Налицо конфликт репликации. Что делать? Вот этот случай для себя распишите какое вы хотите поведение.
    Ответ написан
  • Как сделать чтобы большая БД держала нагрузку?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ооо.... Вы это сейчас вообще серьёзно?

    Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
    Запускаю свою облачную платформу, код и архитектура создана с нуля.

    У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

    Например: юзер пишет какой-то запрос и ему не нужно указывать на какой сервер что отправлять или откуда читать, для него это один сервер.

    Значит этому юзеру достаточно ходить только на мастер.
    Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
    select somefunc();
    Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

    Другой пример:
    begin isolation level repeatable read;
    select ...
    update ...
    commit;

    Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
    И прочие принципиально-нерешаемые вопросы.

    DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
    Ответ написан
    Комментировать
  • Что если сделать RAID 1?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    стирая все данные со второго диска?

    Да хоть оба сразу перезаписать может нулями

    Смотрите документацию, но лучше предполагать что операция деструктивна для всех данных на дисках.
    Ответ написан
  • Возможно ли переделать запрос без использования подзапросов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select distinct on (price_id), price_id,value  from tablename order by price_id, time_action desc


    Если на каждый price_id много строк - то вы неверно думаете что запрос замедляет.
    select price_id, value from prices as t1 lateral (select value from test t2 where t1.id=t2.price_id order by time_action desc limit 1) on true;

    Если таблицы prices нет - то сооружать loose index scan вручную.
    Всё разумеется с подходящим индексом.
    Ответ написан
    Комментировать
  • Не получается сделать дамп pg_dump. Как разобраться с ролями в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А смысл говорить про права если вы даже не подключились к базе?

    Хотите просто и не разбираться с правами - от postgres и снимайте дамп. sudo -u postgres pg_dump ...
    Ответ написан
    6 комментариев
  • Почему Kerio Control не видит MAC'и клиентов за шлюзом Mikrotik?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А почему должен за шлюзом?
    MAC - это L2. Если вы трафик роутите, а не коммутируете - это L3, не будет здесь MAC адресов из разных сетей.

    Если хотите видеть MAC - переконфигурируйте всё в один L2 сегмент. Только это вряд ли осмысленно.
    Ответ написан
    1 комментарий
  • Как выбрать данные из JSON в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select * from json_each('{"a":"foo", "b":"bar"}')
    https://www.postgresql.org/docs/current/functions-...
    Ответ написан
    Комментировать
  • Как собрать лог востановления БД PostgreSQL из dmp-файла?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    > pg_restore_log.txt

    это stdout. А есть ещё stderr, куда всё интересное про ошибки и пишется. А так же verbose туда пишется, который вы запросили.
    cmd 2> stderr.log

    Ошибку пожалуй попробую даже угадать:
    - owner не superuser
    - у вас postgresql < 11.0
    - ошибка прилетает на plpgsql extension который в новой базе уже есть, но его пытается воспроизвести pg_restore
    Ответ написан
    1 комментарий
  • Почему json_decode вызывает Fatal error?

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

    Почему вы решили, что у них должны быть идентичные конфиги? Наоборот, конфиги обычно разные.

    Ну и ошибка не имеет никакого отношения к json. Если лимит памяти memory_limit, выделяемой ядром PHP. Где бы вы его не превысили - получите fatal error, всё просто. И пути отсюда лишь два: пытаться снизить потребление памяти скриптом либо поднимать лимит.
    Ответ написан
    Комментировать
  • Postgres синхронная репликация?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Момент первый: какой synchronous_standby_names?
    Момент второй:
    репликация через настройку synchronous_commit = on

    https://www.postgresql.org/docs/current/runtime-co...
    When set to on, commits will wait until replies from the current synchronous standby(s) indicate they have received the commit record of the transaction and flushed it to disk.

    When set to remote_apply, commits will wait until replies from the current synchronous standby(s) indicate they have received the commit record of the transaction and applied it, so that it has become visible to queries on the standby(s).

    Разницу чувствуете?

    мастер ноду для записи, а все запросы на чтение должны обрабатывать синхронные реплики

    Очень необычный workload. Ни разу такого не встречал.
    Мне любопытно, что вы такое делаете, что вам неважна латентность записи, у вас тяжёлая пишущая нагрузка (не путать с объёмом пишущей нагрузки - репликам это всё писать придётся так же, но ещё и читать), очень много крайне критичного к лагу асинхронной репликации чтения.
    Ответ написан
  • Почему мой рейд диск копирует не зеркально?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Потому что вы так настроили. У вас в массиве /dev/sda и /dev/sdb1
    Ответ написан
    2 комментария
  • О чем говорит результат запрса? Или какой вывод можно сделать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    О чем говорит state = active - запрос до сих пор не завершился

    О том что запрос выполняется.

    О чем говорит wait = lock и wait_event = transaction_id?

    Ожидаем результат другой транзакции.

    которая обновляет некоторые данные

    транзакция 1 обновила строку но ещё не завершилась.
    транзакция 2 хочет обновить ту же самую строку. Но какие данные она увидит? Те которые ещё не подтвердила транзакция 1 - нельзя. Вдруг транзакция 1 будет rollback? Те которые были до прихода транзакции 1 - тем более нельзя. Потому ждём пока не закончится транзакция 1.

    Найдите начало этого хвоста, например вот таким запросом
    Ответ написан
    2 комментария
  • Куда "потерялась" часть размера таблицы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    \dt+ показывает pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size",
    pg_total_relation_size - это pg_table_size + размер индексов таблицы.

    Все они считаются здесь: https://github.com/postgres/postgres/blob/REL_11_S...
    Итого вы не посчитали размер индексов на toast. Как правило он там один

    слои файлов (main, fsm, vm)

    Это relation forks
    Ответ написан
  • Libvirt/qemu откуда берет информацию о CPU?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Из man qemu-cpu-models
    Соответственно заменить использование Host passthrough на какую-нибудь подходящую модельку из списка.
    Ответ написан
    1 комментарий
  • По какой причине RAID1 при удалении одного из дисков блокируется?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Речь видимо о linux raid и конкретно выводе /proc/mdstat

    Литера S в sdc1[0] (S) - обозначает spare диск, а не диск массива. То есть у вас в массиве md1 нет ни одного диска с данными. Необратимая потеря существовавщих данных, некуда писать новые. Потому массив переведён в статус неактивен, он бесполезен и требует вмешательства администратора.

    Откуда в raid1 мог остаться единственный spare - например не успели синхронизировать данные.
    Ответ написан
  • Как работает кластеризация mysql или другой БД кластер?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Такой запрос будет очень медленный

    Почему? Ну если только table - это не таблица, а развесистый view.
    Если таблица - читаем потоком данные удобным для субд способом (сортировки не запрошено - субд выберет удобный для себя порядок чтения) и шлём запросившему. Простая штука, и если производительности не хватает здесь - то это вопрос не к базе и её масштабированию, а к приложению: зачем вообще понадобился там этот не детерминированный миллион строк из таблицы.

    Кластер - это слово очень общее.
    Мастер-реплика cold standby - кластер
    Мастер-реплика hot standby - кластер
    Мастер-мастер - кластер
    N шардов - кластер
    Гетерогенная система с двухфазным коммитом - всё равно кластер

    то что делает кластер

    Неправильный задаёте вопрос.
    Сначала определяете зачем вам головная боль, с какой целью вы хотите добавить второй сервер СУБД и почему вам недостаточно одного - затем смотрите в каком направлении вам необходимо для решения этой задачи двигаться.
    Ответ написан
    Комментировать
  • Долго поднимается SSH на Debian 10, почему?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Система на чём стоит? Я бы предположил недостаток энтропии, обычно характерно на виртуалке: https://wiki.debian.org/BoottimeEntropyStarvation
    Ответ написан
  • Ошибка при использовании Sqlalchemy + Heroku Postgresql DB?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Стена ненужного кода и текста там где достаточно лишь переводчика.
    there is no unique constraint matching given keys for referenced table "users"

    Переведите.
    Посмотрите на свои foreign key
    Найдите что СУБД возмущается конечно имея полные на то основания
    Ответ написан
  • Как подменить диск в Linux?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    добавить диск, смонтировать в другое место
    сделать rsync
    остановить приложение
    сделать rsync
    отмонтировать старый диск
    перемонтировать новый диск в /mnt/files
    запустить приложение

    Если между диском и ФС случайно оказался LVM - то смигрировать силами LVM без остановки приложения.
    Ответ написан
    Комментировать