diff options
author | Eric Cox <eric.cox@mongodb.com> | 2022-03-08 21:23:51 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-03-08 23:05:46 +0000 |
commit | 0b33ab1e493256033622de35cf0857447b70dbd4 (patch) | |
tree | f8d7c15d379d3dfbc893d9a790085d55a5512062 /jstests/noPassthrough | |
parent | 8287a153f11a4c3906305512689cac46918022b9 (diff) | |
download | mongo-0b33ab1e493256033622de35cf0857447b70dbd4.tar.gz |
SERVER-63283 Add query knob to guard HJ plans for $lookup
Diffstat (limited to 'jstests/noPassthrough')
-rw-r--r-- | jstests/noPassthrough/lookup_pushdown.js | 24 | ||||
-rw-r--r-- | jstests/noPassthrough/query_knobs_validation.js | 4 | ||||
-rw-r--r-- | jstests/noPassthrough/sbe_plan_cache_clear_on_param_change.js | 1 |
3 files changed, 29 insertions, 0 deletions
diff --git a/jstests/noPassthrough/lookup_pushdown.js b/jstests/noPassthrough/lookup_pushdown.js index 22a7806f5d2..0c13dadc16d 100644 --- a/jstests/noPassthrough/lookup_pushdown.js +++ b/jstests/noPassthrough/lookup_pushdown.js @@ -378,6 +378,30 @@ MongoRunner.stopMongod(conn); JoinAlgorithm.HJ, {allowDiskUse: true}); + // Setting the 'internalQueryDisableLookupExecutionUsingHashJoin' knob to true will disable + // HJ plans from being chosen and since the pipeline is SBE compatible it will fallback to + // NLJ. + assert.commandWorked(db.adminCommand({ + setParameter: 1, + internalQueryDisableLookupExecutionUsingHashJoin: true, + })); + + runTest(lcoll, + [{$lookup: {from: fcoll.getName(), localField: "a", foreignField: "a", as: "out"}}], + JoinAlgorithm.NLJ, + {allowDiskUse: true}); + + // Test that we can go back to generating HJ plans. + assert.commandWorked(db.adminCommand({ + setParameter: 1, + internalQueryDisableLookupExecutionUsingHashJoin: false, + })); + + runTest(lcoll, + [{$lookup: {from: fcoll.getName(), localField: "a", foreignField: "a", as: "out"}}], + JoinAlgorithm.HJ, + {allowDiskUse: true}); + // Setting the 'internalQueryCollectionMaxNoOfDocumentsToChooseHashJoin' to count - 1 results in // choosing the NLJ algorithm. assert.commandWorked(db.adminCommand({ diff --git a/jstests/noPassthrough/query_knobs_validation.js b/jstests/noPassthrough/query_knobs_validation.js index 671a95d7b84..36db1f286f2 100644 --- a/jstests/noPassthrough/query_knobs_validation.js +++ b/jstests/noPassthrough/query_knobs_validation.js @@ -53,6 +53,7 @@ const expectedParamDefaults = { internalQueryCollectionMaxNoOfDocumentsToChooseHashJoin: 10 * 1000, internalQueryCollectionMaxDataSizeBytesToChooseHashJoin: 100 * 1024 * 1024, internalQueryCollectionMaxStorageSizeBytesToChooseHashJoin: 100 * 1024 * 1024, + internalQueryDisableLookupExecutionUsingHashJoin: false, }; function assertDefaultParameterValues() { @@ -224,5 +225,8 @@ assertSetParameterSucceeds("internalQueryCollectionMaxStorageSizeBytesToChooseHa assertSetParameterFails("internalQueryCollectionMaxStorageSizeBytesToChooseHashJoin", 0); assertSetParameterFails("internalQueryCollectionMaxStorageSizeBytesToChooseHashJoin", -1); +assertSetParameterSucceeds("internalQueryDisableLookupExecutionUsingHashJoin", true); +assertSetParameterSucceeds("internalQueryDisableLookupExecutionUsingHashJoin", false); + MongoRunner.stopMongod(conn); })(); diff --git a/jstests/noPassthrough/sbe_plan_cache_clear_on_param_change.js b/jstests/noPassthrough/sbe_plan_cache_clear_on_param_change.js index e1b3e39b417..8a9cc66e4e7 100644 --- a/jstests/noPassthrough/sbe_plan_cache_clear_on_param_change.js +++ b/jstests/noPassthrough/sbe_plan_cache_clear_on_param_change.js @@ -34,6 +34,7 @@ const paramList = [ {name: "internalQueryCollectionMaxNoOfDocumentsToChooseHashJoin", value: 1}, {name: "internalQueryCollectionMaxDataSizeBytesToChooseHashJoin", value: 100}, {name: "internalQueryCollectionMaxStorageSizeBytesToChooseHashJoin", value: 100}, + {name: "internalQueryDisableLookupExecutionUsingHashJoin", value: true}, ]; const conn = MongoRunner.runMongod(); |