[SERVER-15239] serverStatus metrics incorrect: "operation.idhack", "queryExecutor.scanned", "queryExecutor.scannedObjects" Created: 12/Sep/14  Updated: 06/Dec/22  Resolved: 22/Mar/16

Status: Closed
Project: Core Server
Component/s: Querying
Affects Version/s: 2.6.4, 2.7.6
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: J Rassi Assignee: Backlog - Query Team (Inactive)
Resolution: Done Votes: 1
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
related to SERVER-15238 Add jstests for serverStatus().metrics Backlog
is related to SERVER-14964 nscanned not written to the logs at l... Closed
is related to SERVER-13197 Tighten index bounds and allow compou... Backlog
is related to SERVER-17862 Unify stats reporting for log/profile... Closed
Assigned Teams:
Query
Operating System: ALL
Participants:

 Description   

Regression since 2.4; affects current v2.6 and master.

The following metrics from serverStatus().metrics no longer get updated properly:

  • operation.idhack
  • queryExecutor.scanned
  • queryExecutor.scannedObjects

Reproduce with:

// Test "operation.idhack" when query uses idhack.
db.foo.drop();
db.foo.insert({_id: 0});
oldMetrics = db.serverStatus().metrics;
db.foo.find({_id: 0}).itcount();
newMetrics = db.serverStatus().metrics;
assert.eq(newMetrics.operation.idhack, oldMetrics.operation.idhack + 1);
 
// Test "queryExecutor.scanned" when query scans index entries.
db.foo.drop();
db.foo.ensureIndex({a: 1});
db.foo.insert({a: 1});
db.foo.insert({a: 2, b: 0});
db.foo.insert({a: 2, b: 1});
db.foo.insert({a: 2, b: 1});
oldMetrics = db.serverStatus().metrics;
db.foo.find({a: 2, b: 1}).hint({a: 1}).itcount();
newMetrics = db.serverStatus().metrics;
assert.eq(newMetrics.queryExecutor.scanned, oldMetrics.queryExecutor.scanned + 3);
 
// Test "queryExecutor.scannedObjects" when query fetches documents.
db.foo.drop();
db.foo.ensureIndex({a: 1, b: 1});
db.foo.insert({a: 1, b: 1, c: 1});
db.foo.insert({a: 1, b: 1, c: 1});
db.foo.insert({a: 1, b: 2, c: 1});
oldMetrics = db.serverStatus().metrics;
db.foo.find({b: 1, c: 1}).hint({a: 1, b: 1}).itcount();
newMetrics = db.serverStatus().metrics;
assert.eq(newMetrics.queryExecutor.scannedObjects, oldMetrics.queryExecutor.scannedObjects + 3);



 Comments   
Comment by James Wahlin [ 22/Mar/16 ]

This issue is no longer present on master.

Generated at Thu Feb 08 03:37:25 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.