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

[4.0] Performance regression processing large aggregation commands

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: 4.0.15
    • Fix Version/s: 4.0.16
    • Component/s: None
    • Labels:
      None
    • Backwards Compatibility:
      Fully Compatible
    • Operating System:
      ALL
    • Sprint:
      Execution Team 2020-02-10
    • Linked BF Score:
      0

      Description

      Due to the backport of SERVER-43910, all aggregation commands now call BSONObj::toString() via redact() on execution. For large BSON objects, this is a very expensive operation.

      This performance regression will be most noticeable for large aggregation commands that execute quickly. This is not related to pipeline stages necessarily, but command object size. For example, $in on a large array will observe this regression.

      This is caused by the absence of changes from SERVER-35912 in 4.0, which changed the inheritance of PipelineCommand from BasicCommand to Command. This performance regression does not exist in 4.2 and master because PipelineCommand does not inherit from BasicCommand, which calls into redact() and BSONObj::toString().

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              benety.goh Benety Goh
              Reporter:
              louis.williams Louis Williams
              Participants:
              Votes:
              0 Vote for this issue
              Watchers:
              24 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: