
yopp
31.03.2017
09:54:25
судя по твоим рассуждениям, ты не осбо понимаешь как данные едут на диск

Nick
31.03.2017
09:54:38
иначе б не спрашивал ничего)))

yopp
31.03.2017
09:55:24
потому что там есть журнал, там есть кеш wt, там есть кеш файловой системы
например документы в wt кеше хранятся декомпресированные, а на диск они сливаются уже компрессированные, как следствие нет смысла под кеш отдавать всю память. нужно чтоб часть памяти уехала под дисковый кеш, это тупо эффективнее

Google

yopp
31.03.2017
09:56:49
у тебя есть немного ручек в линуксе чтоб покрутить дисковый кеш
возможно твои 100% busy без симптомов в монге это именно эффективно работающий дисковый кеш
слишком мало улик, а ты уже полез в кишки wt

Nick
31.03.2017
09:58:12
я понял твой послы, попробую пособирать

yopp
31.03.2017
09:59:08
nmon замени на node_exporter и сделай рядом графики моего экспортера и iops на диске
если у тебя нжмд, время начать переезжать на ssd
raid 10 не нужен
если нужна надёжность, добавляй реплики
развалившийся рейд убьёт тебе монгу
resync сожрёт вообще весь iops и монга будет стоять раком
если не хватает iops, но есть cpu и ты уже на ssd, нужно смотреть на nmve

Nick
31.03.2017
10:00:54
на это повлять особо не поулчится

yopp
31.03.2017
10:01:07
рейд софтовый?

Google

Nick
31.03.2017
10:01:19
на самом деле хз

yopp
31.03.2017
10:02:41
ну вот видишь. ты ничего не знаешь про эксплуатируемую систему, а из-за какой-то тулзы которая показала тебе страшую цифру, начал копать низкий уровень, который вообще эксплуатантов субд не касается, а касается только разработчиков субд и очень редко dba, которые копают специфические проблемы

James
31.03.2017
10:25:17
хай пипл
подскажите почему долгая запись
2017-03-31T13:09:45.100+0300 I COMMAND [conn1435846] query somebasename.activity_31 query: { $query: {}, $orderby: { request_time: -1 } } planSummary: COLLS CAN, COLLSCAN cursorid:4130067536824 ntoreturn:25 ntoskip:0 keysExamined:0 docsExamined:390534 hasSortStage:1 keyUpdates:0 writeConflicts:0 numYields:3051 nreturned:25
reslen:11190 locks:{ Global: { acquireCount: { r: 6104 } }, Database: { acquireCount: { r: 3052 } }, Collection: { acquireCount: { r: 3052 } } } 665ms

yopp
31.03.2017
10:32:09
Для того чтоб вернуть 25 документов монга прочитала 390к. Тебе нужен индекс.

Nick
31.03.2017
14:55:13
Поставили mongo-exporter, настроили графану. собственно вопрос по самим метрикам -
в Query Executor Query Executor и Query Executor как должны соотноситсья?

yopp
31.03.2017
15:08:38
«в Query Executor Query Executor и Query Executor»?!
тебе нужен второй воркспейс: Mongo Collection
https://gist.github.com/y8/f566c5b6101e29e241075ad71f9b15d7
монга какая?
там в одном из минорных релизов 3.2 добавили самое интересное: стату по индексам
тебе нужны графики WT * Activity
они показывают активность кеша по данным и индексам
меня конечно местами убивает работа с тегами/зонами в монге. Теги уже успели стать зонами, а диапазоны всё ещё надо, сука, в config.tags смотреть.

Алексей
31.03.2017
15:53:35

yopp
31.03.2017
16:01:34
$)
на следующей неделе туда патчи поедут

Алексей
31.03.2017
16:08:45
о круто

yopp
31.03.2017
16:25:14
а ещё вот такие вещи очень умиляют.
https://yopp.in/11LM

Google

yopp
31.03.2017
16:25:18
https://yopp.in/11Mf
потому что кеширование это вторая по сложности задача, после придумывания имён. на продуктивном шарде, где к коллекции летают запросы, вы такого врядли увидите, а вот локально легко.
(просто сделайте запрос который выполнится на всех шардах, например `find({}).count()`)

Алексей
02.04.2017
11:50:16
парни, а почему при билде индексов background: true не дефолт ?

Sergey
02.04.2017
12:04:48
А почему должен быть?

Алексей
02.04.2017
12:06:18
ибо не блокирующий

Sergey
02.04.2017
12:32:35
Условно

Алексей
02.04.2017
12:33:17
есть хоть одна причина почему стоит на продуктовой базе делать индекс без этого ключа ?

Sergey
02.04.2017
12:36:19
Потому что на продуктовой базе это самоубийство, проще реплики по одной вывести и сделать индекс без background

Алексей
02.04.2017
12:36:40
ну тоесть роллинг индекс ?

Sergey
02.04.2017
12:37:27
Ну я не уверен как оно точно называется, но видимо да

Алексей
02.04.2017
12:38:28
в чем плюс такого подхода ?
вижу только контролируемость при планировании ресурсов
других плюсов не понимаю

Sergey
02.04.2017
12:39:53
В том, что ты контролируешь этт процесс. Если сразу все слейвы пойдут перестраивать индекс - база может не потянуть нагрузку

Алексей
02.04.2017
12:40:19
ага. ок.

Sergey
02.04.2017
12:40:46
Ещё, до недавних пор, слейвы вообще не умели background:true

Алексей
02.04.2017
12:40:55
я заметил что строительство индекса упирается ровно в одно ядро
тоесть если базы данных у тя загружены планово, тоесть примерно на половину ядер очевидно уйти в жесткий ад заюзав еще одно ядро не получится.
тоесть при праивльном планировании ресурсов background: true всё еще рулит.
тогда почему он не дефолт :)

Google

yopp
02.04.2017
12:45:49
потому что это может занять бесконечное время
это блокирует ряд операций
это требует памяти
перезапускаешь в standalone, делаешь индекс, ставишь обратно в кластер, догоняешь оплог, промутишь в мастер

Алексей
02.04.2017
12:47:13
бесконечное время это аргумент.
я так понимаю это агрумент при высокой нагрузке на запись ?

Sergey
02.04.2017
12:48:23

yopp
02.04.2017
12:48:34
для того чтоб построить индекс, нужно читать данные, а значит нужно место как для куска данных, так и для индекса
в нормальном состояние, в продакшене, у тебя есть стабилизировавшийся кеш, который оптимален для твоей нагрузки. сделав background ты часть этого кеша забираешь на строительства индекса
что в 99% случаев приведёт к пиздецу неизвестной продолжительности

Алексей
02.04.2017
12:50:34
хорошо. звучит убедительно.
однако и тут не понятно. при роллинг индексе нагрузки на выведенную ноду нет ни на запись ни на чтение.

yopp
02.04.2017
12:51:23
так как многие не понимают последствий, по-умолчанию выбрали самый жесткий способ, который заставит тебя _задуматься_ перед тем как делать

Алексей
02.04.2017
12:51:41
построение индекса на ней в блокрирующем режиме и в неблокирующем потенциально займет одно и тоже время

yopp
02.04.2017
12:51:42
что такое роллинг индекс?

Алексей
02.04.2017
12:52:04
это вот то что вы описываете роллинг индекс. по одной выводим строим вводим

yopp
02.04.2017
12:52:39
потому что там алгоритм другой
я перефразирую: так сделали чтоб народ не стрелял себе в коленку
(хотя я всё ещё не понимаю почему у курсоров по-умолчанию таймаута нет)

Google

Алексей
02.04.2017
12:55:35
https://github.com/mongodb/mongo/blob/584ca76de9ee66b3e11987e640f5317ae40975e4/src/mongo/db/index_builder.h#L46

yopp
02.04.2017
12:55:35
если ещё проще: создание индекса ебически дорогая операция с точки зрения cpu и io. ты должен думать головой перед тем как строить индекс, иначе ты почти гарантированно наебнёшь кластер

Алексей
02.04.2017
12:57:52
https://github.com/mongodb/mongo/blob/72408d7f852058088e1446f77cbea06c029df133/src/mongo/db/catalog/index_create.h#L71
as there is no concurrency benefit to building a subset of
* indexes in the background, but there is a performance benefit to building all in the
* foreground.
*/

yopp
02.04.2017
12:59:50
but there is a performance benefit to building all in the foreground.
ну

Алексей
02.04.2017
12:59:54
но
foreground
2017-04-02T13:13:23.421+0300 using default 'dump' directory
2017-04-02T14:18:49.055+0300 done
background
2017-04-02T14:20:47.295+0300 using default 'dump' directory
2017-04-02T15:13:51.539+0300 done
второе получено из первого путем
for f in *.json.gz; do
cp "$f" "$f~" &&
gzip -cd "$f~" | sed 's/"background":false/"background":true/g' | gzip > "$f"
done

yopp
02.04.2017
13:00:50
это всё конечно замечательно. но какую проблему ты пытаешься решить?

Алексей
02.04.2017
13:01:09
лишь понять зачем так

yopp
02.04.2017
13:01:16
because reasons

Алексей
02.04.2017
13:01:26
так себе ответ

yopp
02.04.2017
13:01:33
я тебе выше уже аргументы дал

Алексей
02.04.2017
13:01:55
да дал. и комменты в коде говорят что нет бенефита.

yopp
02.04.2017
13:02:06
на незагруженной базе, коненчо разница будет на уровне статистической прогрешности. bg будет немного медленее fg (там иначе данные из хранилища достаются)

Алексей
02.04.2017
13:02:11
но я от чегото вижу этот бенефит

yopp
02.04.2017
13:02:18
потому что твой тест говно :)