Задать вопрос
  • Как ускорить создание индекса в PosgGreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какого индекса? Возможно сюрприз, но они сильно разные.

    1) PSQL создает индекс в одно-поточном режиме. Это 10% от всей производительности cpu.

    psql - это клиент, он вообще не создаёт индексы.
    postgresql - начиная с 11 версии умеет многопоточное создание btree. Хотя, наверное, вернее будет сказать сортировку.

    2) Как я понял он считывает базу перерабатывает и сжимает. (В одно-поточном режиме это происходит оч медленно.)

    Не базу, а таблицу. Один раз полный seqscan для create index (с блокировкой записи) или два seqscan для create index concurrently (без блокировки таблицы).
    Ничего не сжимает.

    3) Из-за того что он медленно перерабатывает данные, он не использует всю скорость ссд на котором расположена база.

    Ну смотря какие диски. Дешёвые SSD вполне можно озадачить временными файлами в большом количестве и одним ядром CPU, видел и такое.

    Для ускорения построения большого индекса нужна память maintenance_work_mem. Сколько не жалко. 10, 20, 30, 100гб.
    На postgresql 11 - плюс настроить число воркеров max_parallel_maintenance_workers, max_worker_processes, max_parallel_workers

    но не нашел как их реализовать

    Если хотите поучаствовать в разработке самого postgresql - welcome в список рассылок pgsql-hackers. Как делали parallel create index можно почитать по ссылкам с коммита.
    Ответ написан
    Комментировать
  • Как восстановить БД имея только .frm и .idb файлы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Скопируйте весь /var/lib/mysql/ и запустите базу, лучше той же major версии, поглядывая за логом.
    Ответ написан
    Комментировать
  • Как найти в базе поля по шаблону "наоборот"?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    where 'ct_head_short' like template
    seqscan ожидаемо, но для малого числа строк работать будет
    Ответ написан
    Комментировать
  • Где найти книги по БД или SQL в которых подробно описаны транзации?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Подробно? Суровая книжка? Тогда вам путь вот сюда:
    Transactional Information Systems Theory, Algorithms, and the Practice of Concurrency Control and Recovery, Gerhard Weikum и Gottfried Vossen
    Ответ написан
  • Почему может не реплицирвоватся База Данных postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    выводы \l+ и \dt+ в проблемной базе на мастере и реплике совпадают?

    При потоковой репликации реплика является точной бинарной копией мастера.
    гипотезы:
    повреждена база, но активности в ней нет и потому остаётся незамеченным
    лишние файлы на мастере
    Ответ написан
  • Как запретить ввод данных в колонку в sql таблице?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ваша субд не умеет generated columns? Например, mysql умеет
    В более общем случае - добавляете триггер, в котором высчитываете новое значение и таким образом игнорируете все попытки его исправить вручную.
    Ответ написан
    Комментировать
  • Как взять из MySql колонки из конца (!) таблицы, с лимитом 30, и рассортировать их в по увеличению id(34,35,36)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Взять выборку и обернуть во второй select с обратной сортировкой.
    select fields,... from (
    select fields,... from tablename order by field desc limit 30
    ) as subquery
    order by field limit 30


    Впрочем, если подумать:
    (
    select fields,... from tablename order by field desc limit 30
    )
    order by field limit 30

    mysql умеет
    Ответ написан
    1 комментарий
  • Ошибка [1064] You have an error in your SQL syntax?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ну я допустим совершенно солидарен с СУБД. Что вы хотели вот тут сказать?
    AND ( REPORT='NArray )

    не представляю. Найдите откуда это пришло и исправьте.
    Ответ написан
    Комментировать
  • Как выучить PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    MySQL выучил

    Знаете, даже опытного DBA реально удивить чем-то, что оказывается в базе существовало уже десяток лет.
    Поэтому фраза "MySQL выучил" не воспринимается как-то иначе чем признание в невежестве. Я работал с mysql много лет, оказывается топ3 пользователь по этому тегу на тостере. Знаю я mysql? Ничего подобного. Даже исходник открывал всего 1 раз.

    Какой смысл вы заложили в фразу "MySQL выучил"? Как его можно выучить?

    по курсу от WebForMySelf

    Это тот перепечатник, описывающий функционал, который mysql до сих пор не умеет? mysql_query, когда такого расширения вовсе уже не существует в PHP?
    Надеюсь, 5 лет назад когда вы изучали - было приличнее.

    В качестве обзорной экскурсии по устройству PostgreSQL могу припомнить хорошую лекцию Владимира Бородина, поищите записи Ильи Космодемьянского.
    Мануал хотя бы один раз надо прочесть от начала до конца
    И практика. Без мануала вы не узнаете какие возможности есть, без практики - не поймёте как (и, к слову, зачем) ими пользоваться.
    Ответ написан
    1 комментарий
  • Ошибка синтаксиса (примерное положение: "ON"). Ошибка?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А где тут ошибки нет?
    В теге указан postgresql, где синтаксис create database вот такой: https://www.postgresql.org/docs/current/sql-create...

    А ваш запрос как раз начиная со слова on никак не похож и явно от какой-то другой СУБД.
    Ответ написан
    1 комментарий
  • Как правильно использовать модуль multiprocessing с PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    решил отказаться от SQLite даже для хранения ссылок на файлы

    А зачем?
    sqlite отличная самая распространённая в мире база (см. android, firefox, chrome - sqlite всюду)
    Слабо себе представляю sqlite в масштабе террабайта, а в масштабе пары мегабайт postgresql будет явный overkill.

    Ну а по теме - я не питонщик и по приведённому коду мне совершенно неясно что же вы делаете. Профилируйте своё приложение, ищите где теряете время.
    Ответ написан
  • Почему запрос отправляется не корректно?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Начал писать комментарий про вот уже скоро 20 лет существования http/1.1, но впрочем всё чуть проще:

    https://tools.ietf.org/html/rfc2616#section-14.23
    A client MUST include a Host header field in all HTTP/1.1 request messages

    Вы грубо нарушили стандарт. Вы представились как HTTP/1.1 клиент, но не передали требуемый для этого стандарта заголовок Host.
    Некорректный запрос клиента - это код 400, сервер вам отвечает корректно.

    Минимально возможный запрос для HTTP/1.1 - это две строки:
    GET /... HTTP/1.1
    Host: api.vk.com

    Возможно потребуются ещё какие-нибудь заголовки, но это уже по необходимости. Браузеры типично отправляют много дополнительных заголовков.

    Одна строка была давным-давно допустима для HTTP/1.0, где на одном IP мог быть максимум 1 сайт. Большинство современных серверов вас выслушают по HTTP/1.0 но вряд ли вернут то что вы хотите, т.к. не будут знать, о каком домене вы спрашиваете и соответственно какому обработчику передавать запрос.
    Ответ написан
    Комментировать
  • Как использовать SQL запрос с to_tsquery и include?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Что такое include?

    чтобы в найденные объекты Lead добавлялись поля Unit, основываясь на unitId.

    Банальный join.
    Ответ написан
    Комментировать
  • Как создать БД от имени роли, имя которой не соответствует юзеру в Линукс?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Аккаунт ОС не имеет никакого отношения к пользователю БД. База может быть настроена проверять подлинность пользователя по соответствию имени пользователя - peer для unix sock. Но это не обязательно и это единственное что может связывать пользователя ОС и базу. (кроме учётки владельца, у того есть доступ напрямую к файлам)

    Но пользователь базы должен уже существовать. А раз вам нужно создать сперва пользователя - то тогда же создайте и базу для него.

    Далее следует сказать, что рядовой пользователь вовсе не может создавать базы данных. Это право должно быть выдано явно.
    Подключиться к postgresql можно только к конкретной уже существующей БД и у вашего пользователя должны быть права как на прохождение аутентификации указанным в hba методом так и права на подключение к нужной базе.
    Ответ написан
    Комментировать
  • Что нужно докупить к raspberry pi 3 b+?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Карта памяти поприличнее, блок питания, кабель питания, сетевой кабель.

    А вы какой ответ ожидали увидеть?
    Ответ написан
    5 комментариев
  • Почему wal-g backup-push зависает на Finished writing part 3?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    archive_command = '/usr/local/bin/backup_wal.sh'

    cat /usr/local/bin/backup_wal.sh
    #!/bin/bash

    . /etc/wal-g.d/server-s3.conf

    wal-g backup-push /var/lib/pgsql/9.6/
    wal-g backup-list

    Аааа?... Это вы сейчас серьёзно?

    Не будет это работать. archive_command вызывается на каждый сегмент WAL - 16мб изменений обычно. То есть легко десятки раз в секунду на нагруженных базах. Пытаться отсюда делать бекап кластера - идея ужасная.

    wal-push в archive_command должен быть. backup-push отдельно, из крона обычно.
    Ответ написан
    Комментировать
  • Возможна ли репликация с 10 postgres серверов на один общий сервер?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    как более правильно выполнять репликацию

    А что хотите-то?

    Штатной логической репликацией (pg 10 и выше) или через pglogical или даже триггерной репликацией можете реплицировать в одну базу. Корректное внесение DDL за свой счёт.
    Для физической репликации - репликация строго 1:1, потому разные инстансы базы. Всякие докеры абсолютно не нужны для этого. Разворачиваете реплики в разных директориях и на разных listen портах и всё. В ubuntu/debian штатные скрипты pg_ctlcluster даже есть чтобы инстансами удобно рулить.
    Ответ написан
    1 комментарий
  • Контроль I/O для сервера. Как ограничить потребление IOPS?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    См. механизм cgroups.
    Крутилки для io там были, например: https://unix.stackexchange.com/q/48138
    Ответ написан
    1 комментарий
  • Mysql индексы и DESC сортировка - как подружить?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    mysql давным давно умеет backward index scan.
    select * from events order by event_date desc limit 10
    select * from events order by event_date asc limit 10

    Оба могут использовать индекс по event_date.

    Начиная с 8.0 вы даже можете указать направление сортировки индекса и самостоятельно. ASC и DESC в определении индекса больше не игнорируются.
    Ответ написан
    1 комментарий
  • Как настроить KVM виртуализацию с двумя бриджами?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Чем вам поможет KVM, да и любая виртуализация в принципе, если софтинку убить нельзя, а она объедается памяти без ограничений? Всё равно OOM будет.

    Настройка сети KVM для вашего случая ничем не отличается, даёте ей один vif подцепленный на br1 и 10.0.0.250/24 в качестве default gateway. Кроме разве что того, что настройки IP адресации вам надо указывать в самом госте. Ну или dhcp настроить.
    Ответ написан
    2 комментария