yopp
"bytes currently in the cache" : 710342011, "bytes read into cache" : 496185602, "bytes written from cache" : 161808640,
Alexey
я наверно не совсем понимаю, это что некий тест такой для монги, после которого она выводит статистику?
yopp
нет, это внутренние метрики хранилища
yopp
они относительно безобидные в сборке
yopp
по крайней мере на порядки более безобидные чем setProfile с 10мс
yopp
wt и так собирает кучу информации, так что это просто чтение из памяти без особых изысков
yopp
короче
yopp
currently in cache покажет тебе сколько данные занимают в памяти (можно сравнить с size и понять сколько вмещается в память)
yopp
изменение currently in cache покажет что происходит с кешем конкретной коллекции: кеш вытесняется или вытесняет других
yopp
read into покажет как кеш пополняется / wrritten from показывает сколько из кеша выгружается на диск
yopp
это позволит определить что коллекция/индекс дрочат диск
yopp
дальше берём cursors и смотрим что именно дрочит
Alexey
ага...теперь вроде более менее понятно
yopp
и третий момент
Alexey
расскажи про курсор, что это?
yopp
"block-manager" : { "checkpoint size" : 194146304, "file size in bytes" : 185212928, "file bytes available for reuse" : 28672, }
yopp
изменение file size in bytes покажет тебе когда монга аллоцирует ещё места на диске
yopp
file bytes available for reuse покажет тебе что у тебя в коллекции много «дырок»: страниц которые помечены как свободные
yopp
checkpoint size я чот не помню зачем я сюда ввернул
Alexey
про курсор можно поподробнее, что он показывает?
yopp
ну курсор он и есть курсор
Alexey
как он дрочит диск и тп, давай подробости)
yopp
курсор это штука которая читает данные в wiredtiger
yopp
если про wt метрики
yopp
в монге любой запрос (в sql терминологии select) на чтение открывает курсор
yopp
считай как «постраничная навигация»
Alexey
ок. так
yopp
курсор тебе выдаёт окно в X записей и ты можешь туда-сюда двигать это окно
Alexey
то есть, это размер пачки на запись/чтение?
yopp
нуууу не совсем
yopp
это скорее количество запросов на чтение в базу и что с ними происходит
Serhio
инструмент для "навигации" по записям считанным)
yopp
не только
Alexey
т. е. только для чтения используется?
yopp
"insert calls" : 1257539,
Alexey
а search calls - это как раз find и другие проходы по индексам?
yopp
"search calls" : 616617, "search calls" : 618801,
yopp
да, судя по всему так
Alexey
ясно. А курсор ходит и по кешу и по диску или только по диску?
yopp
курсор ходит по данным. в кеше или на диске они это не его дело
Alexey
ага. так и думал...ясно спасибо
yopp
но тут нужн понимать что wt.cursors это не прямой эквивалент mongodb курсору
Alexey
ок, а какая между ними разница?
yopp
монга поддерживает различные хранилища и wt только одно из (другое MMAPv1 и теперь ещё memory storage)
yopp
так совпало что в wt тоже есть курсоры, потому что wt это такой хитрый key-value сторадж
yopp
но они именно о деталях реализации конкретного хранилища, а не о деталях реализации на уровне монги
yopp
тоесть если ты сделал в монге find({a: 1}) это не значит что cursors изменятся на 1
yopp
оин могут изменится на любое произвольное число, в зависимости от стратегии которую выберет планировщик в хранилище
Alexey
то есть, изменения курсора - это некая логическая операция, которая происходит при достижении N байт при чтиении/записи?
Alexey
N зависит от некого планировщика?
yopp
нет, это логическая опреация связанная с детялями реализации того как хранилище данные возвращает в монгу
yopp
монга, с 2.8 кажется, это просто набор универсальных API для разных хранилищ, которые позволяют хранить произвольные документы
yopp
в bson
Alexey
ну сейчас wt же везде используется
yopp
это не отменяет того факта что у монги есть свои курсоры, а у хранилища _могут быть_ свои
yopp
в MMAPv1 нет курсоров
yopp
там вообще ничего нет, тлен и mmap(1)
yopp
монговские курсоры тебе покажет serverStatus.metrics.cursor и частично opcounters
Alexey
хорошо, спасибо. А вот еще несколько вопросов философско-концептуальных: 1. В бест практисах используют в репликасете 4 сервера. мастер, 2реплика и хайден реплика. Зачем она нужна? чтобы просто не учавствовать в голосовании и для бекапа?
yopp
hidden реплика по тому и hidden что в неё порядочные клиенты ходить не будут, потому что они делают вид что её нет
yopp
а значит её можно воткнуть на медленные диски (главное чтоб на репликацию хватало) и дать памяти по минимуму (главное чтоб на репликацию хватало) и дёргать её как хочешь
yopp
про три ноды (в монге любая нода в любой момент времени может стать primary и потом slave и потом опять primary)
yopp
на самом деле об этом более-менее в доке написано, но это такое количество нод, которые уже обеспечивают более-менее нормальную отказоустойчивость вне зависимости от хотелок пользователей
yopp
тоесть если кто-то там делает запросы с readPref: secondary, если у нас одна нода подохла или мы её вывели из эксплуатации на облуживание, у нас всё ещё остаётся один secondary
yopp
на двух нодах будет уже сложнее. плюс нужен будет арбитр
yopp
потому что если нода осталась одна, она не станет мастером
yopp
она будет плакать и считать себя slave
yopp
потому что выборы из одного человека, где он-же и кандидат и голосующий — шизофрения и в субд :)
Alexey
ок. А как обычно принято бекапить хайден реплику? монгодампом или остановкой демона и рсинком файлов?
Alexey
и что тогда с оплогом происходит? сколько можно демона выключенным держать?
yopp
оплог это capped коллекция, что с ним может происходить? :)
yopp
правильно: у него с конца выпадают самые старые данные (FIFO)
yopp
тоесть демона можно держать выключеным ровно столько, сколько времени покрывает сейчас оплог
yopp
бекапить лучше всего через снепшоты фс
yopp
ежечасно. прореживая суточно
yopp
и еженедельно делать дамп
yopp
нужно не забывать что если у тебя sharded cluster то там особая процедура
Alexey
пока у меня репликасет, но скоро будет шаред кластер
yopp
главное что нужно сделать с бекапами: постоянно их проверять
yopp
идеально заливая ежедневно на стейджинг