LINUX.ORG.RU
ФорумAdmin

PostgreSQL + Docker + многоядерный процессор

 , , ,


0

4

Добрый день.

Имеется postgresql запущенный в docker контейнере. С большой и тяжелой базой.

В состоянии покоя - она почти ничего не весит, но при проведении запроса нагрузка на процессор увеличивается до 100%. И стенд, который обращается к нему, начинает дико тормозить.

Причем нагрузка приходится лишь на одно ядро. Остальные почти не загружены. Память почти не потребляется. Выделил для базы 8гигов в настройках по http://pgtune.leopard.in.ua/

Читал, что postgresql автоматический может использовать все ядра. И складывается впечталение, что она упирается в docker.

Отсюда вопрос. Как можно заставить работать postgres на нескольких ядрах через docker?

Спасибо.

postgresql запущенный в docker контейнере. С большой и тяжелой базе.

Хорошая заявка на премию Дарвина.

anonymous ()

при проведении запроса нагрузка на процессор увеличивается до 100%

твой запрос обрабатывается, вот и грузит Проц

Причем нагрузка приходится лишь на одно ядро

логично

Читал, что postgresql автоматический может использовать все ядра.

только >= 9.6 и в редких случаях

uspen ★★★★★ ()
Ответ на: комментарий от robot12

Месяца полтора назад был толстый тред о том, насколько оправданно запихивание СУБД в докер. Поищите, там достаточно интересный диалог на эту тему.

l0stparadise ★★★★★ ()
Ответ на: комментарий от robot12

Я вот столкнулся с информацией, что docker по умолчанию не накладывает ограничении на ресурсы. А по ссылке как раз я понимаю, говорится об ее ограничении...

Я прав?

Krishnoved ()

Докер тупит на толстых задачах. Проверено опытом.

Oxdeadbeef ★★★ ()

Причем нагрузка приходится лишь на одно ядро

Нужно было работать в синебенч или винрар, там все ядра нагружены.

anonymous ()
Ответ на: комментарий от l0stparadise

Статья больше похожа на истерику. Хотят в прод докер, пусть купят подержку. Про сеть и про AUFS давно всё известно.

robot12 ★★★★★ ()
Ответ на: комментарий от robot12

Премия Дарвина - через чур категоричное утвердение, но в докере за счет «слоёной» файловой системы с ходу даёт просадку по иопсам процентов на 10%. Поэтому я бы лично нагруженые бд вообще на выделеный сервер ставил, а докер бы брал в последнюю очередь. Также постгрес плохо себя чувствует после killall -9. Поэтому постгрес в докере надо хитрым скриптом запускать с перехватом сигналов для корректного завершения работы субд в случае если контейнер прибили.

anonymous ()

В позгрессе по факту нету распаралеливания запросов, тоесть 1 запрос выполняется на одном CPU/ядре. Два одновременных запроса будут загружать 2 ядра (и тд), у вас же скорее всего запускается один большой запрос который загружает только одно ядро - докер здесь не причем.

zaz ★★★★ ()
Ответ на: комментарий от anonymous

Также постгрес плохо себя чувствует после killall -9

Ну постгрес вполне себе переживает это, но с чего Вы взяли что докер останавливает контейнеры SIGKILL'ом ?

RTFM https://docs.docker.com/engine/reference/commandline/stop/#usage

robot12 ★★★★★ ()
Последнее исправление: robot12 (всего исправлений: 1)
Ответ на: комментарий от robot12

© 2015-2017 Rancher Labs, Inc. All Rights Reserved.
ребята с богатой историей, ага.
жмешь на Watch the demo и как будто ведро помоев в лицо получил - чудо-вимео. но в саундтреке действительно очень много buzzword'ов, я аж захотел раздеплоить SPAшечки в колокейшоне.

SevikL ★★★★★ ()
Ответ на: комментарий от robot12

Постгрес переживает такое не всегда. Иногда теряется часть транзакционного лога. На моих тогдашних задачах это было критично. По завершению: докер делает sigterm, бд начинает тушить себя корректно. Но в бд в тот момент ворох xa-транзакций. Бд еще не успела корректно потушиться и как раз в разгаре разгребания незакомиченых транзакций приходит sigkill. Я бы настоятельно рекомендовал пускать постгрес в докере только через bash скрипт с trap-ами для того, чтобы не дать докеру прибить контейнер раньше чем постгрес нормально остановится. Если незакомиченные транзакции недороги, то и черт с ним. Но я лично один раз вообще запорол бд полностью играми с sigkill-ом так, что постгрес вообще стартануть не смог. Дело было на версии 9.1. Мое резюме: если есть возможность крутить базу без докера - крути без докера. Для нагруженых большим количеством одновременных транзакций (особенно если они еще ХА) баз - используй дедик. Если постгрес все таки в докере - перехвати sigkill в скрипте- запускалке и дай постгресу закончить завершение нормально. Решил крутить бд в докере - подставляй под неё ssd диск или быструю СХД и почаще делай резервные копии.

anonymous ()
Ответ на: комментарий от Yustas

недавно сравнивал mysql в lxc и в docker на синтетике sysbench. Докер оказался быстрее, главное - /var/lib/mysql смаунтить с хоста, а не томами докера, и все будет ок.

dib2 ★★★★★ ()
Ответ на: комментарий от dib2

недавно сравнивал mysql в lxc и в docker на синтетике sysbench. Докер оказался быстрее

Докер не может быть быстрее lxc, при условии выделения равных ресурсов.

King_Carlo ★★★★★ ()
Ответ на: комментарий от King_Carlo

исследование не претендует на объективность, мне было главное что не медленнее.
окружение было примерно одинаковое, на одном и том же железе. разница была ~15%, емнип

dib2 ★★★★★ ()
Ответ на: комментарий от robot12

Там перечислен менеджмент, который уже кода лет 15-20 в глаза не видел. И да, запихивать субд в докер - это очень-очень-очень плохая идея, особенно с учетом того бардака, который у докера происходит с ФС под вольюмы.

P.S. Имею реальный опыт работы с докером в продакшене, равно как и БД размерами от 10Мб до 2,5Тб, мускуль и постгря.

leave ★★★★★ ()
Ответ на: комментарий от anonymous

вешается на каждый сервис docker-compose отдельно
для чистого докера docker stop --time N, емнип

dib2 ★★★★★ ()
Ответ на: комментарий от leave

Там перечислен менеджмент, который уже кода лет 15-20 в глаза не видел

Ну Вам то виднее!

И да, запихивать субд в докер - это очень-очень-очень плохая идея

Запихивать данные да, а вот код этой самой СУБД можно и впихнуть.

robot12 ★★★★★ ()
Ответ на: комментарий от robot12

А данные у тебя не на вольюме лежать будут? Который в overlayfs2, которую пилят упоротые хипстеры и код которой в апстрим ядра никогда не будет принят?

leave ★★★★★ ()
Ответ на: комментарий от leave

Есть ключик -v (раз) во вторых докер умеет zfs, btrs и devicemapper.

robot12 ★★★★★ ()
Ответ на: комментарий от leave

На самом деле оно уже далеко не так плохо как было 2 года назад. С другой стороны и бенифитов особых с рантайма базы в докере я не вижу. Все равно рсубд горизонтально плохо масштабируются и я не знаю балансировщиков для постгреса в которые можно было бы на ходу экземпляры подкидывать. А зачем тогда эти приседания? Другое дело когда выбора нет особо, например у тебя тупо облако с докерами и всё. Вот дал человеку руководитель ранчер и крутись как хочешь.

anonymous ()
Ответ на: комментарий от leave

мускуль и постгря

«Постгрес». Там „с“ в конце.

anonymous ()

плюсу, можно примеры - «зачем?»

то есть какие выгоды от запуска бинарников СУБД в докере?
Зачем это для веб приложение или ещё чего? Чем не устраивает отдельная вирт. машинка для Postgres?

Den0k ()
Ответ на: комментарий от Den0k

Для быстрого разворачивания стендов с проливкой дампов баз при непрерывной разработке.

И когда баз и стендов очень много.

Krishnoved ()
Ответ на: комментарий от leave

вики: It was merged into the Linux kernel mainline in 2014, in kernel version 3.18.[1][2] It was improved in version 4.0, bringing improvements necessary for e.g. the overlay2 storage driver in Docker.[3]

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.