mongoimport 3.0比2.6.4慢

use*_*912 6 mongodb mongoimport

令我惊讶的是,我发现使用3.0版本与2.6.4将同一文件导入同一个MongoDB(3.0)的速度要慢得多(> 20倍).有没有人有同样的问题?以及如何解决它?

以下是详细信息:

  1. 2.6.4为同一个json文件加载大约16K行

    **-logbash-3.2$ mongoimport --host mcp-mongo-dev-1201.sea2.rhapsody.com:27017 --db media 
            --collection media --upsert --upsertFields _id --type json --file /data/xxx.json
    
    Run Code Online (Sandbox Code Playgroud)

    connected to: mcp-mongo-dev-1201.sea2.rhapsody.com:27017
    2015-10-08T15:24:02.007-0700            Progress: 8860712/5024041951    0%
    2015-10-08T15:24:02.007-0700                    54900   18300/second
    2015-10-08T15:24:05.004-0700            Progress: 15590853/5024041951   0%
    2015-10-08T15:24:05.004-0700                    96900   16150/second**
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这是3.0运行:

    -logbash-3.2$ mongoimport30 --version
    
    mongoimport version: 3.0.6
    git version: 7588eb887549bd5d2fc7bbc08f7c62d4b29b9d75
    
    -logbash-3.2$ mongoimport30 --host mcp-mongo-dev-1201.sea2.rhapsody.com:27017 --db media 
          --collection media --upsertFields _id --type json --file /data/mediaingestor2.json  --numInsertionWorkers 20000 -v
    
    Run Code Online (Sandbox Code Playgroud)

    2015-10-08T15:53:04.393-0700    using upsert fields: [_id]
    2015-10-08T15:53:04.393-0700    filesize: 5024041951 bytes
    2015-10-08T15:53:04.393-0700    using fields: 
    2015-10-08T15:53:04.396-0700    connected to: mcp-mongo-dev-1201.sea2.rhapsody.com:27017
    2015-10-08T15:53:04.396-0700    ns: media.media
    2015-10-08T15:53:04.396-0700    connected to node type: replset
    2015-10-08T15:53:04.397-0700    using write concern: w='majority', j=false, fsync=false, wtimeout=0
    2015-10-08T15:53:04.397-0700    using write concern: w='majority', j=false, fsync=false, wtimeout=0
    2015-10-08T15:53:07.393-0700    [........................] media.media  1.5 MB/4.7 GB (0.0%)
    2015-10-08T15:53:10.393-0700    [........................] media.media  1.5 MB/4.7 GB (0.0%)
    2015-10-08T15:53:13.393-0700    [........................] media.media  1.5 MB/4.7 GB (0.0%)
    2015-10-08T15:53:16.393-0700    [........................] media.media  1.5 MB/4.7 GB (0.0%)
    2015-10-08T15:53:19.393-0700    [........................] media.media  1.5 MB/4.7 GB (0.0%)
    
    Run Code Online (Sandbox Code Playgroud)

在MongoDB方面,我mongostat看到更新的数量大约为400,比上面的2.6.4版本小约16K.请注意,我也试过--numInsertionWorkers 20000,它应该使它更快但似乎与没有使用此选项相同.也许我使用的git版本不是很好的?

小智 3

使用 20,000 个 numInsertionWorkers 运行 mongoimport 是过多的。由于支持如此多的线程而进行大量上下文切换,应用程序可能会损失性能。正确的工作线程数量将更接近您运行 mongoimport 的机器上的核心数量。您可以通过测试找到正确的数字,从单个工作人员开始,监视性能,然后在每次连续测试中将数字加倍[1,2,4,8,16,...]。您最终会发现性能不再提高的数字。到那时,您将超出正确的工人数量。

在比较版本或进程之间的性能时,重要的是要确保测试运行之间的条件没有改变。如果服务器或网络在不同的测试中发生变化,则很难在两个过程之间进行有意义的比较。

检查数据库本身是否处于相同的状态。例如,如果导入工作负载针对具有数据和预先存在的索引的数据库和空的数据库运行,则会出现性能差异。

检查文件系统和操作系统配置是否设置正确。我们的文档列出了您应该设置的一组系统配置以获得最佳性能。http://docs.mongodb.org/manual/administration/development-notes/

检查运行 mongoimport 的服务器是否未饱和。查找可能与 mongoimport 竞争而消耗 CPU、内存和网络带宽等资源的任何竞争进程。同样,检查运行 mongod 的服务器上是否存在争用服务器资源的竞争进程。

检查 mongostat 中排队的读取器和写入器的数量,mongostat 中排队操作的数量较少可能表明 mongoimport 进程是瓶颈。我怀疑 mongoimport 进程是数据库上游的瓶颈。