插入mongodb封顶集合的速度惊人地慢

插入mongodb封顶集合的速度惊人地慢,mongodb,pymongo,publish-subscribe,throughput,Mongodb,Pymongo,Publish Subscribe,Throughput,我使用mongodb的capped collections+可定制游标作为pubsub引擎,使用pymongo。(描述了这种方法)。 我的环境包括几个主题、几个出版商和几十个订户 这非常有效,只是偶尔我会遇到插入操作,这些操作需要花费很长时间才能完成 我的理解是mongodb可以支持每秒插入超过10K个文档,这就是为什么我对单个插入操作需要85ms感到惊讶的原因。(我在我的生产环境中也观察到过几次>1sec,但无法使用此SSCCE进行复制) 为了将延迟降到最低,禁用了日志记录,我使用了最低写入关

我使用mongodb的capped collections+可定制游标作为pubsub引擎,使用pymongo。(描述了这种方法)。 我的环境包括几个主题、几个出版商和几十个订户

这非常有效,只是偶尔我会遇到插入操作,这些操作需要花费很长时间才能完成

我的理解是mongodb可以支持每秒插入超过10K个文档,这就是为什么我对单个插入操作需要85ms感到惊讶的原因。(我在我的生产环境中也观察到过几次>1sec,但无法使用此SSCCE进行复制)

为了将延迟降到最低,禁用了日志记录,我使用了最低写入关注点,这有帮助,但没有解决问题

这是什么原因造成的?我如何修复它?


这是一个SSCCE。我并行运行以下脚本两次:

import time, pymongo, pandas as pd
DBNAME = 'test5'
COLLNAME = 'abc'
mongo = pymongo.MongoClient()
#mongo[DBNAME].drop_collection(COLLNAME)
if DBNAME not in mongo.database_names():
    coll = mongo[DBNAME].create_collection(COLLNAME,
                                    capped = True, size = 50 * 1024 * 1024, max = 1024 * 1024,
                                    fsync = False,  # no delays please (FYI, journaling is disabled)
                                    #autoIndexId = False,
                                    )

tarr = []
for _ in range(1000):
    msg = dict.fromkeys([ 'f%d' % j for j in range(30) ], 'foo')
    t1 = time.time()
    coll.insert(msg)  # <-- INSERT() HERE
    tarr.append(time.time() - t1)
    time.sleep(1./100)  # 100 docs/sec. surely not too much load...

print pd.Series(tarr).describe()
mongodb信息:

db version v3.2.0-rc0
git version: bf28bd20fa507c4d8cc5919dfbbe87b7750ae8b0
OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1404
    distarch: x86_64
    target_arch: x86_64

"storageEngine" : { "name" : "mmapv1", "supportsCommittedReads" : false }

journaling DISABLED
pymongo version = 3.0.3
实验期间,
iostat-xtm 5
的输出:

*** BEFORE ***
11/08/2015 09:05:02 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.11    0.95    0.49    0.10    0.00   92.35

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    10.20    0.00    6.80     0.00     0.08    24.71     0.14   20.12    0.00   20.12   2.82   1.92
dm-0              0.00     0.00    0.00   17.00     0.00     0.08     9.88     0.24   13.84    0.00   13.84   1.13   1.92
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    7.80     0.00     0.03     8.41     0.04    4.92    0.00    4.92   2.05   1.60
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00


*** DURING ***
11/08/2015 09:05:07 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.25    0.26    0.55    0.26    0.00   89.67

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    13.60    0.00   40.60     0.00     0.59    29.52     4.84  119.15    0.00  119.15   1.60   6.48
dm-0              0.00     0.00    0.00   54.20     0.00     0.59    22.11     5.00   92.18    0.00   92.18   1.20   6.48
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    4.20     0.00     0.02     9.14     0.01    2.29    0.00    2.29   2.29   0.96
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

11/08/2015 09:05:12 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.02    0.26    0.41    0.44    0.00   90.88

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    19.00    0.00  109.80     0.00     0.63    11.82    22.95  209.01    0.00  209.01   1.84  20.24
dm-0              0.00     0.00    0.00  128.80     0.00     0.63    10.07    25.55  198.37    0.00  198.37   1.57  20.24
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    4.40     0.00     0.02     8.00     0.02    4.73    0.00    4.73   2.18   0.96
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

11/08/2015 09:05:17 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.81    0.27    0.39    0.16    0.00   93.37

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     8.40    0.00   24.80     0.00     0.29    24.19     0.26   10.55    0.00   10.55   1.94   4.80
dm-0              0.00     0.00    0.00   33.20     0.00     0.29    18.07     0.31    9.35    0.00    9.35   1.45   4.80
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    3.40     0.00     0.01     8.94     0.01    2.35    0.00    2.35   2.35   0.80
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00


*** AFTER ***
11/08/2015 09:05:22 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.85    0.40    0.46    0.00    0.00   93.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     3.80    0.00    0.40     0.00     0.02    84.00     0.00    6.00    0.00    6.00   6.00   0.24
dm-0              0.00     0.00    0.00    4.20     0.00     0.02     8.00     0.03    7.81    0.00    7.81   0.57   0.24
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    1.60     0.00     0.01    11.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

更新:我们将mongodb切换为在内存中运行(按照所描述的方式)。这台机器有足够的内存来维持它。令人惊讶的是,它没有帮助!我们在插入时间上仍然看到相同的“尖峰”。奇怪的事情正在发生。我不知道是什么引起的


更新:我们还在内存中升级到mongodb V3.2。相同的结果。

看起来问题在于,在创建集合时(调用
create\u collection
),而不是在插入时,只使用完全非阻塞写入

您可以在
MongoClient
级别禁用写入确认,如下所示:

mongo=pymongo.MongoClient(w=0)
或仅针对以下电话:

coll.insert(msg,w=0)

无论是哪种方式,当我使用WiredTiger存储在普通磁盘备份的3.2 MongoDB实例上本地尝试此操作时,最大时间都会下降到0.001。

使用explain()so db.COLLNAME.explain().insert()运行查询。这是mongo shell提供的。我不是Python程序员,但您可以获得更多信息。使用explain(true)将提供更多信息。@Hughzi我找不到如何
解释插入操作。。。关于这一点(实际上,关于更新)已经有一个未回答的问题:抱歉,我没有意识到插入操作没有解释。有一件事可能是索引,您能运行db.COLLNAME.getIndexes()吗?它们比任何其他变量都慢写。您使用的是哪种存储引擎?这里值得注意的是,您运行的是MongoDB 3.2候选发行版(在db版本中用“-rc0”表示),而不是稳定的发行版。也许值得尝试3.0.7(最新的稳定版本)。如果您想要发布候选测试,我至少会升级到3.2.0-rc1或3.2.0-rc2,这应该在不久的将来发布。@JamesWahlin,对。我忘了提到我也用3.0.7做了同样的尝试。同样的行为。我切换到v3.2.0-rc0以检查它是否有帮助。这当然减少了写入程序被阻止的时间,但不幸的是,我仍然存在相同的基本问题,即插入在mongodb端花费了太多时间。@shx2 Ok,那么您是如何衡量这一点的?
db version v3.2.0-rc0
git version: bf28bd20fa507c4d8cc5919dfbbe87b7750ae8b0
OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1404
    distarch: x86_64
    target_arch: x86_64

"storageEngine" : { "name" : "mmapv1", "supportsCommittedReads" : false }

journaling DISABLED
pymongo version = 3.0.3
*** BEFORE ***
11/08/2015 09:05:02 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.11    0.95    0.49    0.10    0.00   92.35

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    10.20    0.00    6.80     0.00     0.08    24.71     0.14   20.12    0.00   20.12   2.82   1.92
dm-0              0.00     0.00    0.00   17.00     0.00     0.08     9.88     0.24   13.84    0.00   13.84   1.13   1.92
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    7.80     0.00     0.03     8.41     0.04    4.92    0.00    4.92   2.05   1.60
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00


*** DURING ***
11/08/2015 09:05:07 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.25    0.26    0.55    0.26    0.00   89.67

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    13.60    0.00   40.60     0.00     0.59    29.52     4.84  119.15    0.00  119.15   1.60   6.48
dm-0              0.00     0.00    0.00   54.20     0.00     0.59    22.11     5.00   92.18    0.00   92.18   1.20   6.48
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    4.20     0.00     0.02     9.14     0.01    2.29    0.00    2.29   2.29   0.96
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

11/08/2015 09:05:12 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.02    0.26    0.41    0.44    0.00   90.88

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    19.00    0.00  109.80     0.00     0.63    11.82    22.95  209.01    0.00  209.01   1.84  20.24
dm-0              0.00     0.00    0.00  128.80     0.00     0.63    10.07    25.55  198.37    0.00  198.37   1.57  20.24
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    4.40     0.00     0.02     8.00     0.02    4.73    0.00    4.73   2.18   0.96
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

11/08/2015 09:05:17 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.81    0.27    0.39    0.16    0.00   93.37

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     8.40    0.00   24.80     0.00     0.29    24.19     0.26   10.55    0.00   10.55   1.94   4.80
dm-0              0.00     0.00    0.00   33.20     0.00     0.29    18.07     0.31    9.35    0.00    9.35   1.45   4.80
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    3.40     0.00     0.01     8.94     0.01    2.35    0.00    2.35   2.35   0.80
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00


*** AFTER ***
11/08/2015 09:05:22 AM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.85    0.40    0.46    0.00    0.00   93.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     3.80    0.00    0.40     0.00     0.02    84.00     0.00    6.00    0.00    6.00   6.00   0.24
dm-0              0.00     0.00    0.00    4.20     0.00     0.02     8.00     0.03    7.81    0.00    7.81   0.57   0.24
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    1.60     0.00     0.01    11.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00