Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-44478

Allow $indexStats access counters to be manually reset

    XMLWordPrintableJSON

Details

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Minor - P4 Minor - P4
    • None
    • None
    • None
    • Query Optimization

    Description

      Index access counters can only be reset by recreating the index or restarting the mongod. Under certain circumstances such as maintenance activities it is desirable to begin measuring anew how indexes are being accessed.

      Currently this can be accomplished by dropping/recreating the index:

      db.foo.drop();
      db.foo.createIndex({ a: 1 })
      db.foo.insert({ a: 1 })
      db.foo.find({ a: 1 })
      db.foo.find({ a: 1 })
      db.foo.find({ a: 1 })
      var a = db.foo.aggregate({ $indexStats: {} }, { $match: { name: "a_1" } }).toArray()[0].accesses
      assert.eq(a.ops, 3);
      db.foo.dropIndex("a_1")
      db.foo.createIndex({ a: 1 });
      var b = db.foo.aggregate({ $indexStats: {} }, { $match: { name: "a_1" } }).toArray()[0].accesses
      assert.eq(b.ops, 0);
      

      This is undesirable as while the index is being recreated operations that used that index may resort to COLLSCANs instead. An alternate approach of recreating the index with a "dummy" field could be done as well, but this would still incur the cost of building a new index.

      If resetting counters is needed, a new command and shell helper (command: resetIndexCounters / collection helper: db.collection.resetIndexCounters(indexName)) could be introduced to handle this functionality.

      Attachments

        Activity

          People

            backlog-query-optimization Backlog - Query Optimization
            alex.bevilacqua@mongodb.com Alex Bevilacqua
            Votes:
            2 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated: