2012-11-25 7 views

Trả lời

4

Một mặt, nó là hoàn toàn có thể chỉ có một số bộ phận của chỉ số này trong RAM http://docs.mongodb.org/manual/applications/indexes/#indexing-right-handed

chỉ số không cần phải phù hợp hoàn toàn vào RAM trong mọi trường hợp. Nếu giá trị của trường được lập chỉ mục tăng lên với mọi lần chèn và hầu hết các truy vấn đều chọn các tài liệu được thêm gần đây; sau đó MongoDB chỉ cần giữ các phần của chỉ mục giữ các giá trị gần đây nhất hoặc "ngoài cùng" nhất trong RAM. Điều này cho phép sử dụng chỉ mục hiệu quả cho các hoạt động đọc và ghi và giảm thiểu số lượng RAM cần thiết để hỗ trợ chỉ mục.

Mặt khác, db.serverStatus() cung cấp cho bạn tổng hợp thông tin bạn muốn. Kiểm tra http://docs.mongodb.org/manual/reference/server-status/#server-status-indexcounters:

Giá trị indexCounters.btree.hits phản ánh số lần chỉ mục đã được truy cập và mongod có thể trả về chỉ mục từ bộ nhớ.

+0

Cảm ơn. Tôi đã thử 'db.serverStatus(). IndexCounters.btree' Nhưng Nó cho thấy một đối tượng với tất cả các số không. '\t { \t \t "truy cập": 0, \t \t "hit": 0, \t \t "bỏ lỡ": 0, \t \t "reset": 0, \t \t "missRatio": 0 \t} ' Tôi đã chạy truy vấn vài lần và truy vấn của tôi sử dụng chỉ mục. giải thích() cho thấy nó. Bạn có thể tìm thấy lý do tại sao không? –

+0

Bạn đang chạy phiên bản nào? Các tài liệu chỉ ra rằng "Trong 2.2 và sau đó, những dữ liệu này phản ánh việc sử dụng chỉ mục thực tế". – chx

+0

Đó là 2.2.0, tôi sẽ cập nhật lên 2.2.1 và xem kết quả. –

1

Có, có một cách. Bạn có thể sử dụng totalIndexSize() hoặc stats() để kiểm tra kích thước của chỉ số

> db.collection.totalIndexSize() 
> 1073741824 


> db.collection.stats() 
> { 
"ns" : "collection.test", 
"count" : 100006, 
"size" : 72104, 
"avgObjSize" : 4506.5, 
"storageSize" : 688128, 
"numExtents" : 3, 
"nindexes" : 1, 
"lastExtentSize" : 524288, 
"paddingFactor" : 1.0170000000000319, 
"systemFlags" : 1, 
"userFlags" : 0, 
"totalIndexSize" : 1073741824, 
"indexSizes" : { 
    "_id_" : 1073741824 
}, 
"ok" : 1 

Cả hai sẽ trở lại với kích thước chỉ mục của bộ sưu tập theo byte. Ví dụ trên cho thấy kích thước chỉ mục là 1GB.

CẬP NHẬT

Để tìm tổng kích thước chỉ số của toàn bộ cơ sở dữ liệu, bạn có thể sử dụng stats()

> db.stats() 
{ 
    "db" : "test", 
    "collections" : 10, 
    "objects" : 5909990, 
    "avgObjSize" : 2888.31186440677965, 
    "dataSize" : 17, 
    "storageSize" : 14745603499, 
    "numExtents" : 17, 
    "indexes" : 8, 
    "indexSize" : 1073741824, 
    "fileSize" : 50331648, 
    "nsSizeMB" : 163453, 
    "ok" : 1 
} 

Bây giờ bạn có thể so sánh indexSize với RAM máy tính để kiểm tra xem các chỉ số phù hợp trong bộ nhớ hay không. Và bạn có thể tăng kích thước RAM để chứa chỉ mục đầy đủ.

Hy vọng điều này sẽ giúp

+0

Nhưng điều đó không nói bất cứ điều gì về nơi chỉ mục là ...? – chx

+0

@chx, kiểm tra câu trả lời cập nhật của tôi – RameshVel

+0

@RameshVel Tôi có đủ RAM nhưng tôi đang tìm kiếm giải pháp trực tiếp cho dù tôi có thể tìm kiếm nó hay không. –