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

Improve performance of command writeConcern parsing

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.4.1, 3.5.1
    • Component/s: Querying, Replication
    • Labels:
      None
    • Backwards Compatibility:
      Fully Compatible
    • Backport Completed:
    • Sprint:
      Query 2016-12-12
    • Linked BF Score:
      0

      Description

      When a command is executed we attempt to extract a "writeConcern" field via extractWriteConcern() call which calls bsonExtractTypedField() to parse write concern from the command object (see here and here).

      In the case where the command does not contain a "writeConcern" field (which is valid), an error Status object is generated by bsonExtractField() and creates an error message using str::stream, which is an expensive operation.

      This came up as a bottleneck when profiling the Queries.IntNonIdFindOne mongo-perf test, with 8 threads and the --readCmd=true flag. This test performs an indexed findOne(). The extractWriteConcern() call consumed roughly 2% of the command run time.

      A few thoughts on fixing:

      1. We could modify the bsonExtractTypedField()/bsonExtractField() path to be more efficient in the "field not found" case. I suspect extracting an optional field may be a common use case for these methods.
      2. We could avoid calling bsonExtractTypedField()/bsonExtractField() to confirm existence of a "writeConcern" field. We should make the "No writeConcern field exist, return the default WriteConcern" path in extractWriteConcern() as fast as possible.
      3. Also consider skipping WriteConcern validation for commands that don't support WriteConcern (weighing the benefits of validation vs cost once we have addressed the above).

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: