2013-10-09 10 views
3

Мой рабочий комплект (db.collection.totalSize()) - 21 GB. Мои индексы занимают . 3.5 GB.Указатель Входит в оперативную память, но все еще пейджинг

На 16 GB ОЗУ, через mongostat Я наблюдаю, что возникают ошибки страницы. Обратите внимание, что они встречаются даже с запросами, использующими индекс.

Используя vmstat, я вижу тяжелые чтения в разделе IO/bi.

Наконец, используя db.serverStatus() в базе данных «администратора», я видел, что резидент МЕМ 10.6 GB.

Учитывая тот факт, что Mongo использует 10,6 ГБ, что, очевидно, больше, чем мой индекс, почему возникает пейджинг?

ответ

3

Индекс не должен спасать вас от необходимости идти на диск.

В базе данных используется 10.6 из 16 ГБ. Это в лучшем случае половина вашего общего размера БД. Если ваши приложения запрашивают разные фрагменты информации, тогда кеш БД будет менее полезен. (Хотя индекс, вероятно, будет кэшироваться в памяти, индекс является лишь небольшим подмножеством полной записи)

Указатель поможет вам найти нужное место, но вам, возможно, придется перейти на диск, чтобы получить его. MongoDB и большинство других БД будут кэшировать самые последние/часто используемые результаты в памяти.

Монго DB называет наиболее commenly запрошенный данные, "Working Set"

Смотрите эту FAQ для получения дополнительной информации.

EDIT: Дополнительная информация о Кэш-память БД будет использоваться в полном объеме.

Кэш может содержать только Х количество данных. Данные, находящиеся в кеше, будут возвращены из кеша (без дискового ввода-вывода). Если ваша программа регулярно запрашивает данные, которые не находятся в кеше, тогда БД придется прибегать к дисковым ввода-вывода для получения данных. Кэш (здесь БД) пытается использовать какой-то алгоритм, чтобы решить, что хранить в кеше. «Разное» относится к данным, которые отличаются от того, что, по мнению кэша, он должен хранить.

Предлагаю вам ознакомиться с кэшированием в целом для получения дополнительной информации.

+0

Таким образом, индекс поиска подходит для оперативной памяти, но выбор всего документа s берет io и ram (что там не используется для подкачки? –

+0

@Kevin: добавлено еще несколько строк для пояснения –

+0

Спасибо SH. Ясный, информативный ответ и полезная ссылка. Исходя из вашего обновления и ссылки, вероятно, что индекс соответствует ОЗУ, но ОС может помещать документы в ОЗУ. Учитывая, что моя оперативная память не охватывает рабочий набор, может возникнуть пейджинг, поскольку документ может заменить индексы в RAM, которая затем требует ошибки страницы, если нужно поместить индекс в память. –

Смежные вопросы