Size: a a a

pgsql – PostgreSQL

2020 July 27

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Yaroslav Schekin
Кто "оно", pg_dump? Я сходу не помню, можете проверить на тестовой базе, несложно же.
партицирование, при запросе, который попал в промежуток конкретной партиции, что будет происходить? копирование партиции или прям в ней оперировать будет? если прям в ней, то copy наверно только для дампа
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Alexandr Emelyanov
партицирование, при запросе, который попал в промежуток конкретной партиции, что будет происходить? копирование партиции или прям в ней оперировать будет? если прям в ней, то copy наверно только для дампа
Прям в ней
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexandr Emelyanov
партицирование, при запросе, который попал в промежуток конкретной партиции, что будет происходить? копирование партиции или прям в ней оперировать будет? если прям в ней, то copy наверно только для дампа
Ещё раз: партиционирование само по себе такого никогда не делает.
Более того, сам по себе PostgreSQL никогда не выполняет никаких COPY.

> копирование партиции или прям в ней оперировать будет?

Конечно, данные будут извлекаться прямо из неё (альтернатива была бы просто невыносимо тупа, Вам не кажется? ;) ).
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Так, хотите сказать, что запускаемый раз в сутки дамп даёт более половины нагрузки на бд по статистике, хотя она достаточно продолжительное время нагружена на сотку?
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Через htop видно что зам селекты/апдейты
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Ладно, надо мониторинг уже на прод выкатить, там статистика более понятна
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexandr Emelyanov
Так, хотите сказать, что запускаемый раз в сутки дамп даёт более половины нагрузки на бд по статистике, хотя она достаточно продолжительное время нагружена на сотку?
Откуда нам знать? Может, другие клиенты у Вас тоже используют COPY (многие API сейчас поддерживают copy protocol, по нему удобно выгружать/загружать большие recordsets).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexandr Emelyanov
Ладно, надо мониторинг уже на прод выкатить, там статистика более понятна
Вот-вот. ;) А то только по pg_stat_statements Вы это не увидите.
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Yaroslav Schekin
Откуда нам знать? Может, другие клиенты у Вас тоже используют COPY (многие API сейчас поддерживают copy protocol, по нему удобно выгружать/загружать большие recordsets).
Нет, у нас jdbc драйвер и просто большой поток данных, блобов в этой бд нет
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Yaroslav Schekin
Вот-вот. ;) А то только по pg_stat_statements Вы это не увидите.
Он готов месяца как три, не выделяют время развернуть на наши стенды и протащить в релиз и прод. Находятся "более приоритетные задачи"
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexandr Emelyanov
Нет, у нас jdbc драйвер и просто большой поток данных, блобов в этой бд нет
Я не знаю, "умеет" jdbc использовать copy protocol или нет.
Но то, что Вы показали раньше, прямо очень похоже на запросы pg_dump. ;)
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Yaroslav Schekin
Я не знаю, "умеет" jdbc использовать copy protocol или нет.
Но то, что Вы показали раньше, прямо очень похоже на запросы pg_dump. ;)
Будем надеяться
источник

V

Valery in pgsql – PostgreSQL
Умеет
источник

V

Valery in pgsql – PostgreSQL
Статистика странная
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Не явно?
источник

V

Valery in pgsql – PostgreSQL
Явно
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Valery
Статистика странная
Крайне, потому и начал разбираться
источник

AE

Alexandr Emelyanov in pgsql – PostgreSQL
Valery
Явно
Тогда у нас скорее всего не используется, да и в таблицы с партициями мы явно не ходим
источник

NA

Nikolay Abrosimov in pgsql – PostgreSQL
Господа, добрый день.

Помогите пожалуйста разобраться в хитросплетениях логики планировщика.

Есть запрос
SELECT count(*) AS total
FROM (SELECT *
     FROM incoming
              JOIN sync_devices ON incoming.device_id_int = sync_devices.device_id
     WHERE incoming.demodulation_time >= '2020-07-23T16:54:37.840Z'
       AND sync_devices.batch_id = 500
     LIMIT 10000) AS query


В таблице sync_devices есть 500 записей с batch_id=500 и 3200 записей с batch_id=3200.

В таблице incoming ~18000 записей для join cо строками, содержащими batch_id=500. И больше 200000 записей для join со строками, содержащими batch_id=3200.

Планировщик использует Nested Loop для маленького джойна и Hash Join для большого джойна. В итоге, небольшое количество данных обрабатывается за 30 секунд, а в разы больший объем данных - за 700мс.

Подскажите в какую сторону копать, чтобы побороть эти тормоза на ровном месте?
источник

V

Valery in pgsql – PostgreSQL
Alexandr Emelyanov
Тогда у нас скорее всего не используется, да и в таблицы с партициями мы явно не ходим
В запросах дичь какая-то, выгрузка дампа в stdout
источник