
yopp
01.06.2017
13:14:58
если время синхронизации не критично, то нужно минимальную производительность, которой хватит на оплог + выборку

Dmitry
01.06.2017
13:15:38
Ну смотри, я начинаю экспорт, secondary начинает прогибаться под нагрузкой...запросы начнут идти на primary?

yopp
01.06.2017
13:15:56
если ты сделаешь readPrefrence: secondary — нет

Dmitry
01.06.2017
13:16:23
Ну тогда у меня просто зависает secondary и на этом все...

Google

yopp
01.06.2017
13:16:32
хм
небось запросы без maxTimeMs, да?

Dmitry
01.06.2017
13:16:53
Там вроде была опция другая по запросам, типа где меньше latency

yopp
01.06.2017
13:17:25
у них таймаут в час установлен?

Dmitry
01.06.2017
13:17:29
Нет

yopp
01.06.2017
13:17:29
или в полтора?

Dmitry
01.06.2017
13:17:32
Я выключил вообще

yopp
01.06.2017
13:17:37
:)
вобщем твоя проблема не в монге, а в том как у вас устроен экспорт

Dmitry
01.06.2017
13:18:16
ну просто у нас был рост данных и я хз сколько экспорту нужно, сначала было 10 минут, потом стало 30, сейчас полтора часа

yopp
01.06.2017
13:18:37
ну вот надо смотреть почему полтора часа
60 гигабайт за полтора часа — очень долго

Google

Dmitry
01.06.2017
13:18:53
курсор висит потому что я итерирую по объектам, делаю запросы на внешние API и сохраняю результаты, поэтому между итерациями может пройти по 5 минут...
ну то есть вытянул документ 1, полез на другую систему, взял данные, посчитал, сохранил в базу, перешел к документу 2

yopp
01.06.2017
13:19:31
11.3777777778 мегабайт в секунду
ммм
я очень люблю эту цифру

Dmitry
01.06.2017
13:19:53
это что?

yopp
01.06.2017
13:20:05
это ~100мбит
которые очень часто говорят о том, что клиент где-то ударился головой в сетевой интерфейс :)

Dmitry
01.06.2017
13:21:00
ты к тому что я тупо сделал? :)

yopp
01.06.2017
13:21:10
нет, это я к тому, что возможно проблема не в io
точнее не в дисковом io, а в сетевом

Dmitry
01.06.2017
13:21:26
не ну EBS же по сети :)
сейчас у нас с4.xlarge

yopp
01.06.2017
13:21:45
не думаю что у ebs полоса 100 мегабит
короч, тебе надо сначала разобраться в проблеме, а не пытаться её решить с наскока

Dmitry
01.06.2017
13:22:16
750
на EBS
судя по документации

yopp
01.06.2017
13:22:48
для начала нужно убедиться что у тебя есть объективная картина происходящего на ноде
как на уровне ос, так и на уровне монги

Google

yopp
01.06.2017
13:23:19
я рекомендую prometheus + grafana
и туда https://github.com/y8/mongo_collection_exporter
с ноды собирать максимум метрик
там вроде клаудвотч экспортер есть

Dmitry
01.06.2017
13:24:48
ок, поработаю над этим
а для начала есть какие-то простые утилиты чтобы собрать это все?
ну типа atop/htop?

yopp
01.06.2017
13:25:24
толку от этого нет
нужно в динамике смотреть корреляции
в духе: в монге упали qps, в это же время полка после пика в сетевом io

Dmitry
01.06.2017
13:26:09
хм, ну статистика по EBS у меня есть в принципе с AWS
но это не ОС конечно

yopp
01.06.2017
13:26:30
нужно не только EBS, нужно видеть утилизацию основных ресурсов

Dmitry
01.06.2017
13:26:31
по монге ясно...что-то надо прикрутить

yopp
01.06.2017
13:26:55
CPU, RAM + RAM IO, DISK + DISK IO, NET + NET IO

Dmitry
01.06.2017
13:27:38
а есть что-нибудь готовое по мониторингу с docker-compose например?

yopp
01.06.2017
13:28:03
прометей и графана точно поднимаются из докера

Dmitry
01.06.2017
13:28:04
а хотя да, как же засунуть в докер если оно мониторит систему...
а, хм

yopp
01.06.2017
13:28:12
нормально засунуть

Google

Dmitry
01.06.2017
13:28:12
прикольно

yopp
01.06.2017
13:28:57
потому что для сборки метрик с хоста всегда есть --privileged или --device
а для выгребания метрик из контейнеров три ведра решений

Denis
01.06.2017
16:20:58
/me
Упс, тыкнулось случайно, извиняйте

George
01.06.2017
17:10:30
Как можно ускорить update_one? Работает намного медленнее, чем insert_many(ordered=False)
Всего около 100 итераций в секунду с обновлением
Понятно, что запись должна быть быстрее, чем перезапись, но почему так критично?
Однажды получилось ускорить этот процесс до 7000 итераций в секунду, но я не знаю что сделал тогда. Монга как-то разогрелась.

Denis
01.06.2017
17:30:38

Dmitry
01.06.2017
17:31:12
а зачем отказываться от insert_many?
а, update_one лол

Denis
01.06.2017
17:31:59
Потому что обновление и вставка две разные операции)

Dmitry
01.06.2017
17:32:02
ну bulk_operations
там вроде копит по 1к операций и выполняет за раз
у меня upsert ы так работают

George
01.06.2017
17:32:59
Насколько я помню, у меня просто тогда было 1 итерация за 10 секунд
Как раз по 1000

Dmitry
01.06.2017
17:33:17
initialize_unordered_bulk_op
у тебя на чем код?

Google

George
01.06.2017
17:33:29
А вот unordered не делал вроде

Dmitry
01.06.2017
17:33:33
если питон то вот initialize_unordered_bulk_op

George
01.06.2017
17:33:33
У меня pymongo

Dmitry
01.06.2017
17:33:47
и туда пишешь что хочешь, хочешь апдейты, хочет что угодно
ну вот
как раз оттуда
у меня тоже )
http://api.mongodb.com/python/current/examples/bulk.html

George
01.06.2017
17:34:52
Но почему тогда он как-то сам мог разогнаться?)
Я замечаю, что монга требует разогрева, первая операция всегда дольше последующих
Хотя занимает 50% озу для кэша

Dmitry
01.06.2017
17:35:15
к примеру
bulk = db.test.initialize_unordered_bulk_op()
bulk.find({'_id': 4}).upsert().update({'$inc': {'j': 1}})
потом после того как накопил сколько нужно операций
>>> try:
... bulk.execute()
... except BulkWriteError as bwe:
... pprint(bwe.details)

George
01.06.2017
17:36:17
Но insert_many на bulk работает

Dmitry
01.06.2017
17:36:23
по поводу скорости наверняка прогревается
но все-равно unordered bulk будет быстрее имхо
я так понял оно все кеширует в памяти, потом по 1к скармливает монге и та уже как-то параллельно пишет, сама разбирается как ей лучше
@dd_bb подскажи пожалуйста, а если у меня будет 2 secondary ноды, и я укажу приоритет на чтение с secondary - оно будет напрягать ноды равномерно?

yopp
01.06.2017
18:04:56
От клиента зависит
update конечно медленнее чем insert.
Для update сначала find надо сделать

George
01.06.2017
18:16:11
Ну да, кстати, индексы же ускорят этот процесс