Cách tốt nhất để tìm xem liệu chỉ mục nằm trong RAM hay Đĩa trong mongodb?Cách tìm chỉ mục có trong RAM hoặc Đĩa [MongoDB] không?
Trả lời
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ớ.
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? –
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
Đó là 2.2.0, tôi sẽ cập nhật lên 2.2.1 và xem kết quả. –
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
kiểm tra câu trả lời cập nhật của tôi – RameshVel