Cara menemukan statistik indeks MongoDB

8

Apakah ada cara kita bisa mencari tahu apa semua indeks di-cache ke RAM? Saya ingin tahu statistik terkait halaman untuk indeks individual (# hit dan miss)

Vishakha dipak
sumber

Jawaban:

9

Anda bisa mendapatkan info klik keseluruhan (contoh lebar) dari db.serverStatus()perintah, dan khususnya:

http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.indexCounters.hits http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.#exverver.misses

Angka-angka ini adalah total yang terlihat selama masa proses, jadi jika Anda ingin mendapatkan nilai atau melihat tren dari waktu ke waktu, maka Anda perlu mencatatnya secara berkala dan menyesuaikan nilainya. Untungnya, jika Anda menginstal Pemantauan MMS , itu akan melakukannya untuk Anda dan membuat grafik hasilnya.

Namun, saat ini tidak ada statistik per-indeks yang tersedia. Permintaan fitur yang relevan dapat ditemukan di sini untuk tujuan pelacakan dan pemungutan suara:

https://jira.mongodb.org/browse/SERVER-2227

Pembaruan: Januari 2016

Statistik yang dirujuk di atas telah dihapus dari output perintah status server, jadi tidak lagi tersedia. Namun, permintaan fitur yang direferensikan sekarang lengkap dan tersedia dalam versi 3.2 dalam bentuk $indexStatsoperator agregasi (dokumen yang ditautkan juga berisi output sampel). Untuk kelengkapan, inilah contoh yang saya kumpulkan:

Sebelum setiap pertanyaan, saya hanya memiliki 2 indeks, default _iddan indexme, keduanya dengan 0 ops:

> db.foo.aggregate( [ { $indexStats: { } } ] ).pretty()
{
    "name" : "indexme_1",
    "key" : {
        "indexme" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T19:03:01.358Z")
    }
}
{
    "name" : "_id_",
    "key" : {
        "_id" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T18:59:24.292Z")
    }
}

Kemudian jalankan beberapa temuan untuk menabrak operasi indexmedan periksa lagi:

> db.timecheck.find({indexme: 33})
> db.timecheck.find({indexme: 55})

> db.timecheck.aggregate( [ { $indexStats: { } } ] ).pretty()
{
    "name" : "indexme_1",
    "key" : {
        "indexme" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(2),
        "since" : ISODate("2016-01-12T19:03:01.358Z")
    }
}
{
    "name" : "_id_",
    "key" : {
        "_id" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T18:59:24.292Z")
    }
}
Adam C
sumber
dari dokumen: "Berubah dalam versi 3.0: Output status server tidak lagi termasuk bagian workingSet, indexCounters, dan recordStats." Ada ide lain?
serv-inc