Задать вопрос
  • Репликация. Правильно ли я понимаю?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    гарантирует ACID где буква «C» означает Consistency — Согласованность.

    В пределах одного кластера postgresql. Т.е. одного сервера.

    возможна ли ситуация когда ключи «X» и «Y» уже реплицированны на сервер «B», но еще не реплицированны на сервер «C»? При асинхронной репликации?

    By design. Потому это и названо асинхронной репликой. Между коммитом на мастере и приходом каждого отдельного асинхронного слейва в это состояние всегда будет какой-то временной лаг.
    Но timeline один на всех, т.к. его ведёт мастер. Ситуация, что на B записан только X, а на C только Y - исключена.

    Синхронная реплика - мастер не ответит клиенту "записано" пока не получит отклик от синхронных реплик из synchronous_standby_names, что те получили эти wal (дефолт, гарантирует, что данные есть минимум на двух машинах и при внезапном сбое вы их не потеряете), применили эти изменения (synchronous_commit=remote_write соответственно два кластера postgresql синхронны. Из-за CAP теоремы теоретически возможно, что при сбое мастера на слейве эта транзакция будет уже записана, а на мастере значится как прерванная. Не знаю, что именно по этому поводу сделано).
    Внимание, что при потере работоспособности синхронной реплики мастер будет доступен только на чтение. Все пишущие транзакции будут ждать возвращения синхронной реплики.

    Гарантируется ли согласованность в системе из нескольких реплицируемых серверов?

    Смотря чем вам допустимо жертвовать для этого. См. CAP теорему.

    Это, разумеется, справедливо только для встроенной бинарной потоковой репликации WAL. Логическая в 10 будет жить по своим особым правилам, как и сторонние триггерные решения.
    Ответ написан
    Комментировать
  • Как с помощью cat записать Exception возникающий в файл?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ошибки принято в stderr писать, а вы только stdout перенаправляете.
    cmd 2> stderr_stream
    Ответ написан
  • Как из таблицы получить массив в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select array_agg(field) from test
    ?
    Ответ написан
    Комментировать
  • Как установить на Debian 8 x64 Java 32 bit?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В общем случае:
    dpkg --add-architecture i386
    apt-get install packagename:i386
    Ответ написан
    Комментировать
  • Как инициализировать файлы Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    sudo rm -rf /var/lib/postgresql

    Это был home dir пользователя, а не каталог кластера. Каталог кластера в дефолтной поставке в /var/lib/postgresql/версия_pg/ещё_одна_директория_main_или_base

    sudo mkdir /media/ad/data/bd1c

    Допустим.

    su postgres -c '/usr/lib/postgresql/9.6/bin/initdb -D media/ad/data/bd1c --locale=ru_RU.UTF-8'

    Внимание на относительный путь. Я не уверен, где в итоге initdb пытался сделать базу.

    привел к виду
    data_directory = '/var/lib/pgsql'

    ? Откуда это здесь взялось?

    какой из postgresql.conf главнее

    Тот, который указан в аргументах запуска postgres. Явным образом через -c config_file либо находящийся в PGDATA в случае отсутствия аргумента с именем конфига.
    Ответ написан
    Комментировать
  • Журналирование в mongodb и postgresql - правильно ли я его понимаю?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Точно про актуальную монгу сказать что-то затрудняюсь.
    Про версию постарше цитата про вторую версию монги
    MongoDB v2.0 will consider a write to be complete, done, finito as soon as it has been buffered in the outgoing socket buffer of the client host.

    Отвечает "записано", когда данные даже не покинули машину клиента, не то что записаны хоть куда-нибудь.
    С таким подходом задумывались ли авторы над потерей данных вообще и исправлено ли сейчас?

    и тут я вспомнил что у postgresql есть параметр wal_writer_delay = 200ms, что-же получается и у postgresql может быть такая ботва что клиент думает что строка сохранена а все накрылось до сброса журнала на диск???

    Если вы намеренно выкрутили гайку synchronous_commit.

    fsync - это очень дорого. Даже на SSD.
    Поскольку это дорого, делаются какие-нибудь фокусы. Магнитные диски ненавидят случайную запись и куда лучше относятся к последовательной. Поэтому и тут тоже придумывают какие-то фокусы.
    В итоге postgresql (если вы сами не отстрелили себе ноги) пишет wal в память, отдельный процесс каждые wal_writer_delay просыпается, сбрасывает на диск накопленные wal и отмечает, в какой позиции wal гарантированно доехал до диска fsync. Поскольку synchronous_commit включен, то перед ответом клиенту "записано" воркер ждёт, пока его данные не будут записаны на диск. После этого отвечает приложению "записано".
    https://www.postgresql.org/docs/current/static/run...
    synchronous_commit (enum) Specifies whether transaction commit will wait for WAL records to be written to disk before the command returns a "success" indication to the client
    Ответ написан
    2 комментария
  • Как убрать сайт из базы вредоносных сайтов Dr.Web?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Это автоматическая отписка от саппорта и ничего делать (даже проверять) они не намерены.
    Нам как-то коммерческий сервис забанили без причины. Удалось обратить на себя внимание только после официального бумажного письма от организации. По другому на контакт никак не шли.
    Ответ написан
    1 комментарий
  • Как узнать почему MySQL нагружает процессор?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В slow log куча запросов без индексов

    MySQL нагружает процессор

    Собственно.

    С консоли - запускайте через SELECT SQL_NO_CACHE. Скорей всего у вас query cache активен.
    Ответ написан
  • Как рассчитать кол-во RAM для memcached?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ну для начала: www.linuxatemyram.com
    Затем настраиваете мониторинг и смотрите в графики мониторинга памяти и мемкеша. Сколько используется памяти приложениями, сколько из выделенной мемкешу памяти он использует, сколько попаданий и сколько промахов, сколько ключей вытесняется.
    Затем правите конфиги, чтобы было побольше попаданий в кэш.
    Ответ написан
    Комментировать
  • Что значит ошибка 1064 в MySQL?

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

    И из очевидного:
    WHERE `rooms`.`id_room` = `accommodation`.`id_room`

    Парсер не поймёт, что такое accommodation. Если вы хотели написать про обновляемые строку, которая спровоцировала вызов этого триггера - то для этого есть NEW и OLD псевдостроки.
    Ответ написан
  • Как преодолеть ограничение в 256 символов в результате MySql запроса?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Настройка group_concat_max_len, и, возможно после понадобится, max_allowed_packet

    От комментариев по целесообразности лучше воздержусь.
    Ответ написан
  • Почему не создается таблица в MySQL с AUTO_INCREMENT?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В книге идентичный пример работает почему-то

    Фокусы руками, найдите различие:
    mysql> CREATE TABLE album ( artist_id SMALLINT(5) NOT NULL, album_id SMALLINT(4) NOT NULL AUTO_INCREMENT, album_name CHAR(128) DEFAULT NULL, PRIMARY KEY (artist_id, album_id) ) engine=innodb;
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
    mysql> CREATE TABLE album ( artist_id SMALLINT(5) NOT NULL, album_id SMALLINT(4) NOT NULL AUTO_INCREMENT, album_name CHAR(128) DEFAULT NULL, PRIMARY KEY (artist_id, album_id) ) engine=myisam;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql>

    У вас с книгой разные дефолтные движки, в будущем от этого могут ещё сюрпризы возникать. Очень разные myisam и innodb по поведению, возможностям и ограничениям.
    Ответ написан
    1 комментарий
  • Почему не работает проверка на вводимое значение в MySQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какую ошибку?

    В любом случае, mysql не умеет check.
    The CHECK clause is parsed but ignored by all storage engines.
    Ответ написан
  • Как организовать хранение БД кучи проектов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если проект не наколеночная поделка одного человека за пару вечеров - то структура БД живёт непосредственно рядом с проектом и накатывается через миграции. Ну, например, описание у Yii2: www.yiiframework.com/doc-2.0/guide-db-migrations.html
    Ответ написан
    1 комментарий
  • Какой тип данных использовать в базе MySql для хранения среднего рейтинга?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Поскольку точность числа совершенно безразлична - можно и float взять.

    decimal 6,3 для хранения диапазона 1..5 как-то сильно избыточен. 6,5 или 4,3 тогда уж.
    Ответ написан
    Комментировать
  • PHP: Почему Class not found если use в другом файле?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    use - синтаксический сахар времени компиляции и действует в пределах только одного файла.
    Ответ написан
    Комментировать
  • Как заполнить поле в mysql таблице уникальным числом?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    set @i = 0;
    update tablename set sku = (@i := @i + 1);
    Ответ написан
    Комментировать
  • Какой должен быть размер базы при дампе?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Во-первых, индексы. В sql-дампе любой индекс - это несколько десятков байт запроса на создание индекса. В базе - это развесистая структура, которая может занимать порядочно места. Один индекс обычно небольшой - но у вас же он не один?
    Во-вторых, как уже упомянули - бинарные файлы могут быть раздуты из-за delete и update запросов, если плохо настроен автовакуум. Касается как самих таблиц, так и индексов.
    Третье: например табличка связей из тройки интов. В pg_dump данные пишутся через copy - один заголовок, следом все строки, значения разделены табуляцией. Итого 3 байта на строку данных оверхеда + строковое представление значения. В реальной таблице - у каждой строки есть заголовок из 23 байт. Плюс выравнивание данных. Итого минимум будет 36 байт на каждую строку. (описание структуры таблицы опять же отдельно хранится) Т.е. текстовый вид внезапно компактнее почти на всём диапазоне значений инта для этой таблички.

    Так что да, текстовый дамп может весить сильно меньше бинарного за счёт исключения всех служебных структур.
    Ответ написан
    1 комментарий
  • Как перевести из UTF-8 кодировки в iso-8859-1?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    gz зачем убрали? Вот и получили сжатый gz'ом бинарник вместо текста.
    Ответ написан