-
Type:
Improvement
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Query Optimization
-
None
-
None
-
None
-
None
-
None
-
None
-
None
This can happen due to eg. a document with parallel arrays (wrt. an existing multikey index) existing in the persisted sample.
We currently fail the query in this case, but can do better (eg. fall back to MP, retry with on-the-fly sampling, trigger a re-sample etc.).
Repro:
// --setParameter featureFlagPersistentStats=true db.adminCommand({setFeatureCompatibilityVersion: "9.1", confirm: true}) db.a.drop(); db.adminCommand({ setParameter: 1, internalQueryPlanRanker: "costBased", internalQueryCBRCEMode: "samplingCE", }); db.a.insertOne({a: [1, 2], b: [3, 4]}); db.runCommand({ analyze: "a", mode: "sample", samplingMethod: "random", }); db.a.deleteMany({}); db.a.insertOne({a: [0], b: 0}); db.a.createIndex({a:1, b: 1, c: 1}); db.a.explain().find({a: {$gt: 0}, b: {$gt: 0}, c: {$gt: 0}})
This fails with MongoServerError[Location10061118]: Parallel arrays are not supported
Or this one:
// --setParameter featureFlagPersistentStats=true db.adminCommand({setFeatureCompatibilityVersion: "9.1", confirm: true}) db.a.drop(); db.a.insertOne({a: [1, 2]}); db.runCommand({ analyze: "a", mode: "sample", samplingMethod: "random", }); db.a.deleteMany({}); db.a.insertOne({a: 0}); db.a.createIndex({a:1, b: 1}); db.a.explain().find({a: {$gt: 0}, b: {$gt: 0}})
Which fails with MongoServerError[QueryPlanKilled]: query plan killed :: non-array path became multikey while the query was suspended: path=a