Uploaded image for project: 'Documentation'
  1. Documentation
  2. DOCS-12249

Docs for SERVER-38063: executionStats or allPlansExecution level explain of an aggregate with a $out does writes

    XMLWordPrintable

Details

    • Task
    • Status: Closed
    • Major - P3
    • Resolution: Fixed
    • None
    • 4.1.7
    • manual, Server
    • None

    Description

      Description

      Description:

      We should document that explain of an $out pipeline with "executionStats" or "allPlansExecution" is disallowed in 4.2. This was not enforced in 3.6 or 4.0, the two existing stable versions that support execution-level explain of aggregate (see SERVER-19758).

      If users want explain information from an $out pipeline, they have two options:
      1) Use the 'queryPlanner' explain verbosity. This will not report execution stats.
      2) Run at 'executionStats' or 'allPlansExecution' verbosity, but omit the $out stage from the end of the pipeline. This will display execution stats for the pipeline that feeds the $out stage. Further work is required for $out to supply execution stats itself, without actually performing any writes.

      Engineering Ticket Description:

      We allow explaining write operations such as the update and delete commands. However, these operations are never supposed to perform writes. An explain of an $out aggregation stage should behave similarly. However, an "executionStats" or "allPlansExecution" verbosity explain of an $out will actually persist the results to the target collection:

      > db.inputColl.drop()
      false
      > db.inputColl.insert({_id: 1})
      WriteResult({ "nInserted" : 1 })
      > db.inputColl.explain("executionStats").aggregate([{$out: "outputColl"}])
      {
      	"stages" : [
      		{
      			"$cursor" : {
      				"query" : {
       
      				},
      				"queryPlanner" : {
      					"plannerVersion" : 1,
      					"namespace" : "test.inputColl",
      					"indexFilterSet" : false,
      					"parsedQuery" : {
       
      					},
      					"queryHash" : "8B3D4AB8",
      					"planCacheKey" : "8B3D4AB8",
      					"winningPlan" : {
      						"stage" : "COLLSCAN",
      						"direction" : "forward"
      					},
      					"rejectedPlans" : [ ]
      				},
      				"executionStats" : {
      					"executionSuccess" : true,
      					"nReturned" : 1,
      					"executionTimeMillis" : 59,
      					"totalKeysExamined" : 0,
      					"totalDocsExamined" : 1,
      					"executionStages" : {
      						"stage" : "COLLSCAN",
      						"nReturned" : 1,
      						"executionTimeMillisEstimate" : 0,
      						"works" : 3,
      						"advanced" : 1,
      						"needTime" : 1,
      						"needYield" : 0,
      						"saveState" : 2,
      						"restoreState" : 2,
      						"isEOF" : 1,
      						"direction" : "forward",
      						"docsExamined" : 1
      					}
      				}
      			}
      		},
      		{
      			"$out" : {
      				"to" : "outputColl",
      				"db" : "test",
      				"mode" : "replaceCollection",
      				"uniqueKey" : {
      					"_id" : 1
      				}
      			}
      		}
      	],
      	"ok" : 1
      }
      > db.outputColl.find()
      { "_id" : 1 }
      

      This behavior was most likely introduced by the fixes to executionStats agg explain under SERVER-29421.

      Instead, we should probably raise an error if a user attempts to perform this operation with an error message such as "$out cannot be explain with 'executionStats' level verbosity or higher". Users who wish to explain an $out operation with execution stats can simply drop the $out stage from the tail of their pipeline.

      Scope of changes

      includes:

      • the 4.2 compatibility notes, as it is a minor breaking change.
      • source/reference/command/explain.txt
      • source/reference/method/cursor.explain.txt
      • source/reference/method/db.collection.aggregate.txt
      • source/reference/method/db.collection.explain.txt

      Impact to Other Docs

      MVP (Work and Date)

      Resources (Scope or Design Docs, Invision, etc.)

      Attachments

        Issue Links

          Activity

            People

              kay.kim@mongodb.com Kay Kim (Inactive)
              kay.kim@mongodb.com Kay Kim (Inactive)
              Kay Kim Kay Kim (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:
                3 years, 12 weeks, 2 days ago