URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 105486
[ Назад ]

Исходное сообщение
"В СУБД PostreSQL добавлена поддержка распараллеливания запросов"

Отправлено opennews , 12-Ноя-15 11:55 
В экспериментальную ветку на базе которой будет формироваться релиз PostreSQL 9.6 приняты (http://rhaas.blogspot.ru/2015/11/parallel-sequential-scan-is...) изменения с реализацией распараллеливания операций последовательного сканирования записей (Sequential Scan), используемых для перебора значений в случае выборки по непроиндексированным полям или при манипуляциях с содержимым полей. Перебор в несколько параллельных потоков позволит существенно увеличить скорость перебора данных на системах с большим числом процессорных ядер. Выигрыш особенно заметен для ресурсоёмких запросов, таких как сопоставление по регулярным выражениям.


Например, выполнение тестового запроса "select * from pgbench_accounts where filler like '%a%'" в обычных условиях занимает 743 мс, в то время как при распараллеливании в четыре потока - 213 мс. При распараллеливании операция сканирования разбивается на части и каждая часть разбирается отдельным обработчиком, после чего результаты работы каждого обработчика объединяются.


URL: https://news.ycombinator.com/item?id=10549732
Новость: http://www.opennet.me/opennews/art.shtml?num=43313


Содержание

Сообщения в этом обсуждении
"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено anonymous , 12-Ноя-15 11:55 
Отличная новость.
постгрес всё вкуснее и вккуснее

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rshadow , 12-Ноя-15 15:13 
Согласен. Но за фильтрацию без индексов в продакшене надо руки отрывать =), а не запросы параллелить.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено КО , 12-Ноя-15 16:40 
Ну нормальный индекс для примера из шапки в студию.
Ну и чтоб вместо '%a%' - bind.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Joes , 12-Ноя-15 17:55 
GIST TRGM?

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rob pike , 12-Ноя-15 18:29 
Во-первых, читайте внимательней.
> Parallel query for PostgreSQL - for which this is the first step

Во-вторых, если соотношение insert и select 100500 к одному-раз-в-месяц-по-ночам, то отрывать надо за индексы.


"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rshadow , 12-Ноя-15 18:54 
По всей видимости вам уже нужна не БД :) А за хранение логов в БД, руки тоже надо отрывать.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено АнониМ , 12-Ноя-15 23:01 
какой-то спор безруких :D :D

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено all_glory_to_the_hypnotoad , 13-Ноя-15 00:14 
> По всей видимости вам уже нужна не БД :) А за хранение логов в БД, руки тоже надо отрывать.

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


"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено anonymous , 13-Ноя-15 07:36 
BTREE плохо подходят для больших баз с write-only нагрузкой.
Cмысл писать такие коменты в теме с PostgreSQL? он же не умеет в LSM

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rob pike , 13-Ноя-15 08:26 
> BTREE плохо подходят для больших баз с write-only нагрузкой.

В случае B-tree всё намного больше определяется конкретной имплементацией чем кажется. Для начала можете посмотреть на LMDB.

> он же не умеет в LSM

Очень хорошо что не умеет. Не приходится ходить покурить пока у него compacting.


"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 13-Ноя-15 10:35 
> Согласен. Но за фильтрацию без индексов в продакшене надо руки отрывать =),
> а не запросы параллелить.

OLTP vs DWH ;)


"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 12-Ноя-15 12:19 
Глядишь, такими темпами лет через 5 и oracle 9 догонит

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Штунц , 12-Ноя-15 12:51 
для этого нужно научиться пакеты поддерживать

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Александр , 12-Ноя-15 13:29 
А вам, что, MySQL лучше Postgres? Зачем Вы гнусите то?

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Sluggard , 12-Ноя-15 13:44 
У Oracle не только MySQL есть. И комментатор выше скорее всего имел в виду это: https://ru.wikipedia.org/wiki/Oracle_Database

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 14-Ноя-15 21:48 
Нет, именно так: "А вам, что, MySQL лучше Postgres? Зачем Вы гнусите то?"
Разговор про один уровень. БЕсплатное, доступное и оооочень даже Advanced. Если уж на то пошло то и Postgres изменяют и делают коммерческим, и функции этих систем, уж совсем недалеко от "крыши" технологий, тут вот с Оракл 9 и сравнивать уже можно.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено GrammarNarziss , 12-Ноя-15 16:41 
"гнусите-то", позорище

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 12-Ноя-15 20:11 
"Гнусите-то", позорище.
Ты же понимашь, что пипл просто пишет как быстрее, чтоб не париться. Так делаешь и ты, но при этом всех оскорбляешь.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rshadow , 12-Ноя-15 15:15 
Думаю лет через пять, такими темпами, перегонять уже будет некого. Как говориться: "Если нет разницы, зачем платить больше?" (с)

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 12-Ноя-15 17:03 
чтобы растратить казённые деньги, зачем же ещё )))

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Вареник , 12-Ноя-15 21:20 
Именно. Где еще взять такую возможность освоить бюджет. Это даже лучше чем латать один любимый участок дороги каждую неделю, высыпая асфальт на снег и лужи.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено rshadow , 13-Ноя-15 11:47 
Как показывает практика деньги пилятся вне зависимости от стоимости ПО, и в не меньших объемах. Просто с Ораклом обосновывать легче.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Танцпольный наймит Госдепа , 13-Ноя-15 17:07 
> Думаю лет через пять, такими темпами, перегонять уже будет некого. Как говориться: "Если нет разницы, зачем платить больше?" (с)

Основной заказчик ПО Оракл — государственный департамент США. Вряд ли за пять лет США кончатся, если вы понимаете о чём я. Но здравый смысл в ваших словах есть, конечно.


"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Аноним , 12-Ноя-15 12:28 
С нетерпением ждём расперпендикуляривания запросов.

"В СУБД PostreSQL добавлена поддержка распараллеливания запро..."
Отправлено Andrey Mitrofanov , 12-Ноя-15 13:48 
> С нетерпением ждём расперпендикуляривания запросов.

Вперпендикуляривания же. ...Возм., от-.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 12-Ноя-15 13:50 
Только вот непонятно, почему degree общий на весь запрос, и почему нельзя было сделать хинтом как в Oracle, не думаю что там патенты мешают ...

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено rob pike , 12-Ноя-15 14:49 
Хинты много раз обсуждались разработчиками PostgreSQL.

https://wiki.postgresql.org/wiki/OptimizerHintsDiscussion


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 12-Ноя-15 15:02 
Только из того "что-плохого" многое после реальной работы с большими и тяжёлыми запросами на серьёзном оборудовании кажется надуманным.

Большой плюс хинтов в том что для сложных запросов можно достаточно простым способом настроить предсказуемое поведение ( хотя Oracle иногда ведёт себя не так как ему указывают, но это в основном из-за недостатка ресурсов ).
Как настроить сложный запрос с помощью предварительных директив не очень понятно, как пример сложный запрос с объединением фильтрованных данных из нескольких таблиц, как ограничивать degree?


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 12-Ноя-15 16:31 
Что за degree? О чём Вы?

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 13-Ноя-15 10:20 
> Что за degree? О чём Вы?

rhaas=# set max_parallel_degree = 4;
SET
Time: 0.270 ms
rhaas=# select * from pgbench_accounts where filler like '%a%';
aid | bid | abalance | filler
-----+-----+----------+--------
(0 rows)

Time: 213.412 ms


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено rob pike , 12-Ноя-15 18:25 
> There is a philosophical difference between PostgreSQL’s approach and that of many other systems. In PostgreSQL, it is encouraged to specify costs and selectivities more than exact plans. There are good reasons for that, such as sheer number of possible plans for even moderately complex queries. Additionally, specifying exact plans tends to lead you into exactly the type of trouble you are trying to avoid by specifying hints in the first place — after input cardinalities change, the previous plan may now be a very poor one.

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 13-Ноя-15 10:18 
>> There is a philosophical difference between PostgreSQL’s approach and that of many other systems. In PostgreSQL, it is encouraged to specify costs and selectivities more than exact plans. There are good reasons for that, such as sheer number of possible plans for even moderately complex queries. Additionally, specifying exact plans tends to lead you into exactly the type of trouble you are trying to avoid by specifying hints in the first place — after input cardinalities change, the previous plan may now be a very poor one.

Это понятно что криворуких, не понимающих что тестовая база в 10 Гб. и рабочая в 1Тб работают по разному, но эти грабли всё-таки в головах.
Ещё раз напишу, хинты - удобный способ делать что-то быстро, в Оракл есть способы прибивать планы без них, но этим пользуются очень редко.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено rob pike , 13-Ноя-15 17:06 
> эти грабли всё-таки в головах

Это значит что эти грабли - будут всегда, у подавляющего большинства пользователей, и с ними ничего не сделаешь.

> хинты - удобный способ делать что-то быстро

А потом, когда это временное "быстро" превратится в долгосрочное "медленно", все интернеты будут полны "ваш PostgreSQL - тормоз". Спасибо, не надо, цель разработчиков PostgreSQL не в том чтобы всех подсадить на платиновый саппорт.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено АнониМ , 12-Ноя-15 23:05 
>Большой плюс хинтов в том что для сложных запросов можно достаточно простым способом настроить предсказуемое поведение

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


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 13-Ноя-15 10:15 
>>Большой плюс хинтов в том что для сложных запросов можно достаточно простым способом настроить предсказуемое поведение
> хинты это рекомендации для оракла, соответственно никакого предсказуемого поведения нет,
> а есть лишь иллюзии. особенно прикольно, когда после нового сбора статистики,
> оракл плюёт на все хинты и начинает стоить декартово произведение таблиц
> с уходом времени выполнения в бесконечность.

Статистика отключаема, и отключается именно по этой причине, план можно прибить гвоздями и в Oracle...


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено all_glory_to_the_hypnotoad , 13-Ноя-15 00:18 
> Только вот непонятно, почему degree общий на весь запрос...

вообще и его быть не должно, должна быть глобальная опция настройки сервера. Потом мб так и будет.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 13-Ноя-15 10:21 
>> Только вот непонятно, почему degree общий на весь запрос...
> вообще и его быть не должно, должна быть глобальная опция настройки сервера.
> Потом мб так и будет.

и что с конкуренцией запросов, кому сколько давать? ядер и 200 может быть...


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено all_glory_to_the_hypnotoad , 13-Ноя-15 22:06 
Очевидно, это видно планировщику запроса исходя из оценочного объёма данных, расположению их по дискам и квотам пользователя если таковые имеются.

> и что с конкуренцией запросов, кому сколько давать? ядер и 200 может быть...

их может быть и сотни тыс. (например, mapreduce кластер). Здесь почти  типичная mr задача.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 12-Ноя-15 20:42 
Так в мускуле есть партицирование таблиц, где по идее происходит тоже самое. При запросе оно выполняет отдельным потоком подзапрос по каждой партиции. Или я ошибаюсь?

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 12-Ноя-15 21:53 
Казалось бы причём тут мускуль.

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено all_glory_to_the_hypnotoad , 13-Ноя-15 00:27 
> Так в мускуле есть партицирование таблиц, где по идее происходит тоже самое.

нет, это просто способ разбиения данных на куски для других целей. Настоящее распараллеливание работает на любой таблице.

>  При запросе оно выполняет отдельным потоком подзапрос по каждой партиции. Или я ошибаюсь?

Вроде ошибаешься, есть какие-то внешние костыли с помощью которых можно шардить запрос по партициям.


"В СУБД PostreSQL добавлена поддержка распараллеливания запросов"
Отправлено АнониМ , 12-Ноя-15 23:07 
А какая цена по памяти всего этого счастья. в оракле параллельные запросы очень не прилично по памяти себя ведут к примеру.

"В СУБД PostreSQL добавлена поддержка распараллеливания запросов"
Отправлено anonymous , 13-Ноя-15 07:44 
> А какая цена по памяти всего этого счастья

Для full table scan это равнозначно нескольким параллельным запросам над 1/4-1/10 таблицы, другое дело, что процессоры это будет жрать как не в себя и тупить приложение будет не только у одного клиента, как без паралельного выполнения запросов, а у всех клиентов.


"В СУБД PostreSQL добавлена поддержка распараллеливания запросов"
Отправлено Alex , 13-Ноя-15 09:38 
Особенно эротично это будет выглядеть на HDD-based базе объёмом больше, чем выделенная под буфер память.

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено anonymous , 13-Ноя-15 07:39 
Пример select * from pgbench_accounts where filler like '%a%'  идиотский, full text search в каком-нидь sphinx будет бодрее чем новая реализация.

Но, это хороший задел для распаралеливания full table scan'ов на несколько узлов с шардингом (которые обещают в следующие лет 5).


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Aleks Revo , 14-Ноя-15 15:54 
А при чём тут вообще full text? был дан пример неиндексируемого в обычных условиях запроса для демнстрации разницы производительности - не более того. А там - что угодно можно анализировать, хоть generate_series, главное, что это теперь МОЖЕТ параллелиться, а не цедится в один поток.
Как итог: транзакции быстрее завершаются, сокращается число потенциальных блокировок и все следующие из этого плюшки.

"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено all_glory_to_the_hypnotoad , 14-Ноя-15 16:28 
> Как итог ... сокращается число потенциальных блокировок ...

обдолбался чтоли? Кол-во блокировок как раз растёт.


"В СУБД PostgreSQL добавлена поддержка распараллеливания запр..."
Отправлено Аноним , 14-Ноя-15 00:36 
PgSQL уже можно использовать как серьезное решение?