Задать вопрос
  • Как работать с БД Postgres и 1с?

    Melkij
    @Melkij
    Опубликовали веб сервис

    Приглядитесь, автор вопроса о чтении напрямую с БД. А прикрутить вместо этого экспорт какими-нибудь штатными средствами и работать уже с этим я как раз и предлагаю.

    Да вроде очень даже неплохо работают, в чем неумение?

    Во всём. От дизайна схемы, написания запросов до в принципе самого подхода к БД.
  • Сколько максимально коннектов может выдержать postgresql-9?

    Melkij
    @Melkij
    48 потоков

    Всего лишь.
    20 активных процессов на каждое ядро, плюс не считая скорей всего немалый %system за очень много fork/sec

    Спасибо почитаем, если не вас не затруднит, поделитесь ссылкой на место в мане.

    В каком мане?
    У postgresql нет встроенного пула коннектов.
    Могу сослаться на man pgbench, посмотрите что делают как -c так и -C опции.
    Документация по pgbouncer там: pgbouncer.github.io
    Документацию на возможно имеющийся пул коннектов в вашей библиотеке приложения - вы не написали ничего о приложении.
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij

    UPD: пожалуй, выключать enable_seqscan в любом случае стоит только из интереса и экспериментов.

    Только для экспериментов, да. Как и другие enable_* крутилки планировщика.
    Кстати, seqscan на самом деле выключить нельзя, off просто задирает планировщику стоимость seqscan в небо.

    Касательно партицирования - это в первую очередь инструмент для управления и архивации данных, а не производительности. Когда вместо долгого delete просто и быстро отстёгивается раздел и уносится в архив, а при необходимости точно так же обратно пристёгивается обратно.
    Хотя для производительности тоже использовать можно, и в эту сторону есть порядком улучшений в последние года. Для всего лишь 25 млн впрочем вряд ли имеет смысл.

    Предположим из 25 миллионов которые есть в таблице, 5 миллионов соответствуют этому условию:

    А далее следует классический вопрос DBA: а нафига вам на приложении понадобилось разом 5 млн строк? Что вы с ними делать будете? Пользователю вывалите?
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij
    Индексы целесообразны селективные. Если читать надо половину таблицы (или всё таблицу как здесь) - то это дешевле сделать последовательным перебором.
    Если надо прочитать 10 строк из миллиарда - индекс нужен.
  • Как правильно заресторить postgres cluster?

    Melkij
    @Melkij
    Ответьте на этот вопрос сами.
    cp: can't stat '/var/lib/postgresql/cluster/0000000100000022000000FE': No such file or directory

    Мне здесь добавить нечего. Требуемого сегмента нет - восстановление невозможно.
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij
    Настроить под своё железо max_parallel_workers_per_gather, max_worker_processes, max_parallel_workers
    https://www.postgresql.org/docs/current/runtime-co...
  • Как правильно заресторить postgres cluster?

    Melkij
    @Melkij
    Важна конфигурация.


    На данный момент вы сконфигурировали неверно. restore_command не смог получить требуемый базой сегмент WAL.
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij
    Как понять используется ли вообще какой либо индекс в запросе?

    parallel seq scan.
    Читали последовательно в несколько независимых потоков без использования индексов.

    Такое ощущение, что индексирование и не используется планировщиком PostgreSQL 11.

    Планировщик генерирует много возможных планов выполнения запроса, затем выбирает тот, который по его подсчётам стоит дешевле - потому и называется cost-based.
    Читать весь индекс, затем потенциально для каждой строки ползти с random access в данные таблицы для проверки, а видит ли ваша транзакция эту строку - рассматривается как очень сильно дороже, чем пройти последовательно сразу по таблице.
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij
    Как я понял из ваших слов явно использовать определенный индекс в запросе не получится и планировщик сам решает что ему использовать.

    Совершенно верно

    по крайней мере можно узнать какой индекс используется в запросе

    explain показывает что по поводу запроса думает планировщик и что тот передаст на вход executor'у
    explain analyze показывает, как реально был выполнен запрос.
    А explain (analyze, buffers) да на включенном track_io_timing ещё покажет сколько блоков трогали и как долго ждали диски.

    Ребята выше советуют отказаться от конкатенации.

    Какие-то копейки даст, глобально - всё равно группировка всей большой таблицы быстрой быть не может.

    Запрос без distinct работает быстрее.

    set max_parallel_workers_per_gather to 0 и будут равны на уровне погрешности. Потому что это один и тот же запрос с точки зрения реализации.
    Просто на один запуск нашлось несколько штук свободных воркеров для активации параллельного исполнения запроса. Запрос считали в 3 ядра - вот и получили execution time в 3 раза меньше.
  • /etc/network/interfaces. FAILED. Что делать?

    Melkij
    @Melkij
    а вы уверены, что ваш интерфейс называется eth0?
  • Почему не работает правило конфига на удаленный доступ к базе postgres?

    Melkij
    @Melkij
    Значит сами разрешили. Смотрите остальные правила pg_hba.conf
  • Как продемонстрировать MVCC в Postgresql?

    Melkij
    @Melkij
    Да хоть с двух консолей. Не race condition поймать пытаетесь.
  • Как реализовать миграцию больших таблиц без блокировок?

    Melkij
    @Melkij
    Nadir N, автор сходу ошибается.
    Add a new column (safe)
    This operation will not block table

    Почти все формы alter table берут эксклюзивную блокировку на таблицу. Да, порой на короткое время - но хотят взять. И будет очень больно, если блокировку взять не сможет быстро - alter table будет ждать мешающую транзакцию, но уже заблокирует все другие транзакции к этой таблице. Поэтому автор сильно вводит в заблуждение, называя эти операции безопасными.
    https://github.com/postgres/postgres/blob/REL_10_S...
  • Big прайсы, обновлять или удалять и заново записывать?

    Melkij
    @Melkij
    Вячеслав Успенский, зависит от.
    Во первых, не поможет (радикально), если это всё так же 10млн транзакций, а не одна. (с оговоркой вокруг синхронного коммита)
    А зависит в первую очередь от дисков. На внятных SSD вы куда раньше упрётесь в одно ядро CPU, даже на обработке одного COPY, а не потока insert'ов, чем в IO.
    Если SSD хреновые - то да, отдельная железка под WAL даст некоторый профит. Впрочем, на хреновых SSD (хинт: это могут быть дорогие серверные, но read-optimised и потому крайне хреновые с точки зрения базы) у вас и так будут приключения с базой. Выселить WAL отдельно может иметь смысл хотя бы для более-менее равномерной латентности отклика на запись. Но на хреновых дисках всё равно печально будет в целом, рано или поздно писать грязные страницы вам всё равно придётся. Поэтому лучше сразу переезжать на нормальные диски.
    Если база на механике - значит вам в принципе не важна её производительность. Отдельно WAL естественно эффект дадут, но вам всё равно не важна производительность этой базы.

    Если говорить о настройках:
    выключить синхронный коммит по крайней мере для этого импорта данных, глобально нормально настроить checkpointer (куда менее часто делать чекпойнты: часовой таймаут, max_wal_size выбрать под своё железо) и bgwriter (более агрессивно).
  • Как решить проблему с настройкой RAID массива?

    Melkij
    @Melkij
    Ставили не так давно железку у хетцнера, шестёрка Micron_5100_MTFD как раз досталась. Под контроллером в два раза хуже были чем под софтовым mdadm + blk_mq. Модель контроллера только по хистори не вижу.
    Латентность на записи у этих SSD конечно выше чем у хороших intel, но жить в том числе базе можно.

    Ну и 1000мбайт/с чего именно? Меряете ли вы производительность сообразно планируемому workload?
  • Можно ли установить libvirt отдельно?

    Melkij
    @Melkij
    HighMan, по API не скажу ничего, мне было достаточно virsh и qemu+ssh://user@server/system
  • Можно ли установить libvirt отдельно?

    Melkij
    @Melkij
    Там какие-то свои особые сертификаты? Мне ssh по ключам достаточно было.
  • PostgreSQL: Как добавить данные?

    Melkij
    @Melkij
    Сначала пишете любой select с любой обработкой какую придумаете - штатных функций для одних только строк много: https://www.postgresql.org/docs/current/functions-...
    Затем дописываете перед полученным запросом insert into - и результат этого запроса будет записан куда скажете (ну или ошибку даст).
  • Какой локальный сервер на Windows 10 выбрать для Laravel, Postgre 9.6, PHP 7?

    Melkij
    @Melkij
    Это какие-то виндовые особенности или почему нельзя взять и поставить nginx, postgresql и php как есть?