Я тестирую MongoDB для архивных данных. У нас есть коллекция из 160 миллионов строк. Экземпляр MongoDB занимает 76,2 Гб виртуальной памяти в блоке физической памяти 12 Гб ;-) Своп обнулен.
Я прочитал, что виртуальная память = физическая + своп.
Что не так в моем случае? Это проблема самого mongoDB?
Спасибо
MongoDB использует файлы с отображением памяти, которые могут быть намного больше, чем фактический физический (или своп), доступный на вашем компьютере. В результате общая используемая виртуальная память обычно равна размеру всех данных на диске в данный момент.
Резидентная память будет представлять собой статистику, которая представляет фактический используемый рабочий набор, хотя в зависимости от ваших ресурсов на коробке и схемы использования она будет со временем расти и приближаться к общему объему физической ОЗУ на хосте. В принципе, если ОС не видит необходимости выгружать старые данные (нехватка памяти), они останутся в ОЗУ.
Когда вы перезапускаете MongoDB, все начинается снова с нуля. Поэтому, если у вас есть известные временные рамки для вашего фактического набора рабочих данных (скажем, вы используете только последние 7 дней), то установленный размер после этого периода времени (при условии регулярного, предсказуемого использования) будет представлять ваш приблизительный размер рабочего набора в терминах оперативной памяти.
Более подробную информацию можно найти в Документах здесь:
http://www.mongodb.org/display/DOCS/Caching
http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage
Наконец, MMS (который является бесплатным) хорошо отображает это для вас с течением времени - сопоставленный, виртуальный, резидентный и не сопоставленный, а также множество других статистических данных (ищите "i" на каждом графике для объяснения) .