yopp
я сейчас не уверен, но насколько я помню из беглого изучения втыкания wt в монгу, вопросами того что куда на диске поедет, занимается уже именно wt. так как там CoW, у тебя всегда _новая версия_ пишется. но никаких отдельных оптимизаций, типа дедуплекации страниц, я в wt не стречал
yopp
ковырятся в кишках wt глупо, потому что это ничего не даст
yopp
банально нет ни одной ручки
Nick
собствено чего я и боялся, если сам док большой а обновляемое поле маленькое, то получаем вычитку всего дока и запись его
Nick
чтобы флаг проставить
yopp
ох
yopp
ты упорно смотришь слону в анал, вместо того, чтоб посмотреть ему в глотку.
yopp
у меня есть кластер где write only workload, там 40% создание документов и 60% обновление
yopp
тоже мапредьюсы, и в диск оно упирается потому что дизайн данных полное говно, а не потому что wt плохой
Nick
вот я к этому и пришел, что флаги использовать это крайне херовая идея в моем случае
yopp
ты пока не представил никаких достаточных улик, подтверждающих твою гипотезу
yopp
возьми вот это https://github.com/y8/mongo_collection_exporter подними прометея и графану и посмотри структуру нагрузки
Nick
спасибо, гляну
yopp
ты увидишь что именно происходит и кто выгружается или вгружается на диск
yopp
если у тебя высокая частота обновления, но документы которые обновляются примерно одни и теже, скорее всего у тебя тупо не хватает памяти под гоячий сет
Nick
ну думаю это отдельное разбирательство будет как настрою
yopp
судя по твоим рассуждениям, ты не осбо понимаешь как данные едут на диск
Nick
иначе б не спрашивал ничего)))
yopp
потому что там есть журнал, там есть кеш wt, там есть кеш файловой системы
yopp
например документы в wt кеше хранятся декомпресированные, а на диск они сливаются уже компрессированные, как следствие нет смысла под кеш отдавать всю память. нужно чтоб часть памяти уехала под дисковый кеш, это тупо эффективнее
yopp
у тебя есть немного ручек в линуксе чтоб покрутить дисковый кеш
yopp
возможно твои 100% busy без симптомов в монге это именно эффективно работающий дисковый кеш
yopp
слишком мало улик, а ты уже полез в кишки wt
Nick
я понял твой послы, попробую пособирать
yopp
nmon замени на node_exporter и сделай рядом графики моего экспортера и iops на диске
yopp
если у тебя нжмд, время начать переезжать на ssd
yopp
raid 10 не нужен
yopp
если нужна надёжность, добавляй реплики
yopp
развалившийся рейд убьёт тебе монгу
yopp
resync сожрёт вообще весь iops и монга будет стоять раком
yopp
если не хватает iops, но есть cpu и ты уже на ssd, нужно смотреть на nmve
Nick
на это повлять особо не поулчится
yopp
рейд софтовый?
Nick
на самом деле хз
yopp
ну вот видишь. ты ничего не знаешь про эксплуатируемую систему, а из-за какой-то тулзы которая показала тебе страшую цифру, начал копать низкий уровень, который вообще эксплуатантов субд не касается, а касается только разработчиков субд и очень редко dba, которые копают специфические проблемы
J
хай пипл
J
подскажите почему долгая запись
J
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
Для того чтоб вернуть 25 документов монга прочитала 390к. Тебе нужен индекс.
Nick
Поставили mongo-exporter, настроили графану. собственно вопрос по самим метрикам - в Query Executor Query Executor и Query Executor как должны соотноситсья?
yopp
«в Query Executor Query Executor и Query Executor»?!
yopp
тебе нужен второй воркспейс: Mongo Collection
yopp
https://gist.github.com/y8/f566c5b6101e29e241075ad71f9b15d7
yopp
монга какая?
yopp
там в одном из минорных релизов 3.2 добавили самое интересное: стату по индексам
yopp
тебе нужны графики WT * Activity
yopp
они показывают активность кеша по данным и индексам
yopp
меня конечно местами убивает работа с тегами/зонами в монге. Теги уже успели стать зонами, а диапазоны всё ещё надо, сука, в config.tags смотреть.
yopp
$)
yopp
на следующей неделе туда патчи поедут
Aleksey
о круто
yopp
а ещё вот такие вещи очень умиляют. https://yopp.in/11LM
yopp
https://yopp.in/11Mf
yopp
потому что кеширование это вторая по сложности задача, после придумывания имён. на продуктивном шарде, где к коллекции летают запросы, вы такого врядли увидите, а вот локально легко. (просто сделайте запрос который выполнится на всех шардах, например `find({}).count()`)
Aleksey
парни, а почему при билде индексов background: true не дефолт ?
Sergey
А почему должен быть?
Aleksey
ибо не блокирующий
Sergey
Условно
Aleksey
есть хоть одна причина почему стоит на продуктовой базе делать индекс без этого ключа ?
Sergey
Потому что на продуктовой базе это самоубийство, проще реплики по одной вывести и сделать индекс без background
Aleksey
ну тоесть роллинг индекс ?
Sergey
Ну я не уверен как оно точно называется, но видимо да
Aleksey
в чем плюс такого подхода ?
Aleksey
вижу только контролируемость при планировании ресурсов
Aleksey
других плюсов не понимаю
Sergey
В том, что ты контролируешь этт процесс. Если сразу все слейвы пойдут перестраивать индекс - база может не потянуть нагрузку
Aleksey
ага. ок.
Sergey
Ещё, до недавних пор, слейвы вообще не умели background:true
Aleksey
я заметил что строительство индекса упирается ровно в одно ядро
Aleksey
тоесть если базы данных у тя загружены планово, тоесть примерно на половину ядер очевидно уйти в жесткий ад заюзав еще одно ядро не получится.
Aleksey
тоесть при праивльном планировании ресурсов background: true всё еще рулит.
Aleksey
тогда почему он не дефолт :)
yopp
потому что это может занять бесконечное время
yopp
это блокирует ряд операций
yopp
это требует памяти
yopp
перезапускаешь в standalone, делаешь индекс, ставишь обратно в кластер, догоняешь оплог, промутишь в мастер
Aleksey
бесконечное время это аргумент.
Aleksey
я так понимаю это агрумент при высокой нагрузке на запись ?
Sergey
тоесть если базы данных у тя загружены планово, тоесть примерно на половину ядер очевидно уйти в жесткий ад заюзав еще одно ядро не получится.
Вот тут немного не понял. Допустим, у тебя 16 физических ядер. Как одно ядро в полку компенсирует 15 остальных?