お世話になっております。
mongoDB のインデックス動作を再確認しようと思い、
1) データ登録
2) インデックス設定
3) find().explain()
を試しました。
MongoDB shell version: 2.6.9
(データ)
> db.test1.stats(1024*1024)
{
"ns" : "nishimura.test1",
"count" : 10000002,
"size" : 2288,
"avgObjSize" : 239,
"storageSize" : 2763,
"numExtents" : 21,
"nindexes" : 2,
"lastExtentSize" : 721,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 549,
"indexSizes" : {
"_id_" : 309,
"h.t_1" : 239
},
"ok" : 1
}
(mongoDB起動直後のサーバーステータス(メモリ))
> db.serverStatus().mem
{
"bits" : 64,
"resident" : 45,
"virtual" : 8555,
"supported" : true,
"mapped" : 4127,
"mappedWithJournal" : 8254
}
(h.t のインデックスを使って、データ10,000件程度を取得するクエリーを発行)
> db.test1.find({'h.t':{'$gte':1400010000,'$lte':1400020000}}).explain()
{
"cursor" : "BtreeCursor h.t_1",
"isMultiKey" : false,
"n" : 10001,
"nscannedObjects" : 10001,
"nscanned" : 10001,
"nscannedObjectsAllPlans" : 10001,
"nscannedAllPlans" : 10001,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 78,
"nChunkSkips" : 0,
"millis" : 19,
"indexBounds" : {
"h.t" : [
[
1400010000,
1400020000
]
]
},
"server" : "localhost:27017",
"filterSet" : false
}
(クエリー後のサーバーステータス)
> db.serverStatus().mem
{
"bits" : 64,
"resident" : 48,
"virtual" : 8555,
"supported" : true,
"mapped" : 4127,
"mappedWithJournal" : 8254
}
予想としては、resident サイズが、インデックス+データ分になると
考えていたのですが、resident はデータ分のみ増える、という結果で
した。
実際、インデックス情報はどこに乗ってるんでしょうか。
(乗せて、不要になったら消している?)
サーバーのメモリが小さめなので、それが影響しているのか?
メモリ情報も添付しておきます。
$ free -m
total used free shared buffers cached
Mem: 1560 1498 62 24 75 1168
-/+ buffers/cache: 254 1306
Swap: 16383 0 16383