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

Update with $set on fairly large document perf regression 2.6.0-rc2 vs 2.4

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 2.6.0-rc2
    • Component/s: Write Ops
    • Query
    • Fully Compatible
    • ALL

      Using YCSB we have identified a potential performance regression in 2.6 on updates. It seems like $set updates (which should not cause document moves) on multiple fields against documents of about 1k in size are significantly slower in 2.6. None of the updated fields are indexed, all of the queries for the updates are against _id.

      We have written a small python script to reproduce this regression, it is attached to this ticket. The script should be run using 2 machines, 1 client, 1 server. On the server just run mongo (2.4 or 2.6), on the client run the test script (make sure to modify the line where MongoClient is created to point at your server). Note, the testing was done using the pymongo trunk code. Simply run the script against 2.4 and 2.6 and compare the elapsed time output. Additionally, in my testing I could see the regression using mongostat on the server.

      Output from a sample test run:
      2.4 time elapsed: 70.486
      2.6 time elapsed: 80.786

      Note that this regression was originally found running YCSB (in particular, workloada) with many threads. The repro script attached here is single threaded, but seems to show the same issue.

        1. update_perf.py
          1 kB
          Andrew Emil

            Assignee:
            backlog-server-query Backlog - Query Team (Inactive)
            Reporter:
            andrew.emil@10gen.com Andrew Emil (Inactive)
            Votes:
            1 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: