标签: wiredtiger

mongodb不可能(?)E11000重复密钥错误重写密钥

我的理解是使用upsert更新:对单个文档执行true是一个原子操作,因此当集合没有唯一的索引字段时,这应该永远不会导致重复键错误,特别是不会出现在主_id键上:

Order.update({ _id: order._id }, query, { upsert: true }, cb) // with mongoose
Run Code Online (Sandbox Code Playgroud)

但这出现在mongod.log中:

    2015-03-27T09:39:10.349-0400 I WRITE    [conn258236] update xyz.orders 
query: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" } update: { $set: { ... 
} keyUpdates:0 writeConflicts:0 **exception: E11000 duplicate key error dup 
key: { : "6353f880-c6a7-4260-809f-98e0af27b9a2" } code:11000** numYields:1 
locks:{} 138ms


    2015-03-27T09:39:10.349-0400 I COMMAND  [conn258236] command xyz.$cmd 
command: update { update: "orders", writeConcern: { w: 1 }, ordered: true, 
updates: [ { q: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" }, u: { $set: { 
... …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query wiredtiger

24
推荐指数
1
解决办法
5925
查看次数

由于 WiredTiger.turtle 权限,Mongodb 无法启动

我正在尝试在 ubuntu 16.04 上启动 mongodb 4.0.4,但数据库拒绝了我的所有尝试。我检查了 mongodb 日志文件,发现名为 WiredTiger.turtle 的文件没有所需的权限。这里记录错误:

2018-11-26T15:14:32.438+0600 E STORAGE  [initandlisten] WiredTiger error (13) [1543223672:438144][32673:0x7fee423e3a40], wiredtiger_open: __posix_open_file, 715: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1543223672:438144][32673:0x7fee423e3a40], wiredtiger_open: __posix_open_file, 715: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-11-26T15:14:32.438+0600 E STORAGE  [initandlisten] WiredTiger error (13) [1543223672:438429][32673:0x7fee423e3a40], wiredtiger_open: __posix_open_file, 715: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1543223672:438429][32673:0x7fee423e3a40], wiredtiger_open: __posix_open_file, 715: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-11-26T15:14:32.438+0600 E STORAGE  [initandlisten] WiredTiger error (13) [1543223672:438594][32673:0x7fee423e3a40], wiredtiger_open: __posix_open_file, 715: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1543223672:438594][32673:0x7fee423e3a40], …
Run Code Online (Sandbox Code Playgroud)

mongodb wiredtiger ubuntu-16.04 mongodb4.0

13
推荐指数
2
解决办法
7829
查看次数

MongoDB返回的计数不正确(WiredTiger)

这听起来很奇怪,我希望我做错了什么,但是我的MongoDB收藏品正在收集我的收藏中Count的一个.

我有一个(我相信)359671文件的集合.但是,该count()命令返回359670个文档.

我正在count()使用mongo shell 执行命令:

rs0:PRIMARY> db.COLLECTION.count()
359670
Run Code Online (Sandbox Code Playgroud)

这是不正确的.

它没有找到我的收藏中的每一个文件.

如果我提供以下查询来计数,我得到正确的结果:

rs0:PRIMARY> db.COLLECTION.count({_id: {$exists: true}})
359671
Run Code Online (Sandbox Code Playgroud)

我相信这是WiredTiger中的一个错误.据我所知,每个文档都有相同的定义,一个整数的_id字段,范围从0到359670,以及一个BinData字段.我没有旧版存储引擎(或Mongo 2,这可能导致问题)的问题.

这是我做错了吗?我不想使用{_id: {$exists: true}}查询,因为完成需要100倍的时间.

mongodb wiredtiger

11
推荐指数
2
解决办法
3535
查看次数

真实集合的名称与文件系统中的名称之间有什么关系

我使用带有WiredTiger存储引擎的MongoDB 3.0.当我在dbPath中检查我的Mongo文件时,我看到了文件的名称,格式如下:collection-0--4989330656807016483.wt collection-2--4989330656807016483.wt collection-4--4989330656807016483.wt...我怎么知道这些文件名和真实集合的名称之间的关系,除了数据大小的方式?

mongodb wiredtiger

8
推荐指数
1
解决办法
4444
查看次数

MongoDB 3.0在副本模式下对oplog集合进行写锁定

在副本模式下,对任何DB中的任何集合的每个写操作也会写入oplog集合.

现在,当并行写入多个DB时,所有这些写操作也会写入oplog.我的问题:这些写操作是否需要锁定oplog?(我正在使用w:1写关注).如果他们这样做,这有点类似于对所有不同DB的所有写操作之间的全局锁定,不是吗?

我很乐意得到任何暗示.

replication mongodb replicaset wiredtiger

8
推荐指数
1
解决办法
990
查看次数

检查 mongodb 中有线老虎的缓存大小

我尝试在mongodb中设置wiredTiger的缓存大小限制。首先,我执行了以下命令:

mongod --wiredTigerCacheSizeGB 1
Run Code Online (Sandbox Code Playgroud)

我还将以下几行添加到名为 mongod.conf.orig 的配置文件中

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
#  engine:
#  mmapv1:
  wiredTiger:
    engineConfig:
       cacheSizeGB: 1
Run Code Online (Sandbox Code Playgroud)

然后执行命令:

mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

为了仔细检查我的更改,我想显示有线老虎当前使用的缓存大小。

有可能显示吗?

mongodb wiredtiger

8
推荐指数
1
解决办法
8571
查看次数

在WiredTiger中对MongoDb文档执行部分更新是否比完整文档更新提供了任何优势?

我正在使用Java驱动程序,虽然这个问题不是特定于语言的,但是要编写对mongodb文档的部分更新,因为使用MMAPv1存储引擎可以在适当的位置编辑文档(在内存中),这样可以提供更好的性能.这确实增加了相当大的开发复杂性,因为我可以立即保存整个文档,而不用担心确切更新的细节.在更新到WiredTiger之后,我了解到这个较新的存储引擎不会编辑文档(在内存中),而是为每次写入分配新的内存(不清楚这是否意味着文档的完整副本或只是差异).这是否意味着无论是完整文档写入还是部分文档写入,它都没有性能差异?

mongodb wiredtiger

6
推荐指数
1
解决办法
759
查看次数

MongoDB/Docker 中的 zstd 块压缩

我在 Windows 10 下使用 docker-compose 像这样:

version: '3'

services:
  mongo:
    image: mongo:4.2
    ports:
      - "27017:27017"
    restart: always
    volumes:
      - type: bind
        source: ${PWD}/mongod.conf
        target: /etc/mongod.conf
    entrypoint: ["mongod", "--bind_ip_all", "--config", "/etc/mongod.conf"]
Run Code Online (Sandbox Code Playgroud)

我的 mongod.conf:

storage:
  wiredTiger:
    collectionConfig:
      blockCompressor: zstd
      configString: "allocation_size=64KB,internal_page_max=64KB,leaf_page_max=64KB"
Run Code Online (Sandbox Code Playgroud)

当我docker exec docker_mongo_1 df使用和不使用 zstd时,我仍然使用相同的磁盘大小。使用 zstd:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda1       65792556  49263808  13156972  79% /data/db
Run Code Online (Sandbox Code Playgroud)

没有:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda1       65792556  47991952  14428828  77% /data/db
Run Code Online (Sandbox Code Playgroud)

(轻微的变化是由于插入数据的随机性,但文档的数量和它们的大小在彼此的百分之几以内。)我使用 mongodump 从 snappy 和 mongorestore …

mongodb docker wiredtiger zstd

6
推荐指数
1
解决办法
141
查看次数

WiredTiger - 在重新同步辅助副本集成员期间"太多打开文件错误"

我正在将辅助副本集成员升级到wiredTiger.我已将它从MongoDB 2.6.3升级到3.0.4并将存储引擎更改为wiredTiger.现在它正在重新同步主数据库中的所有数据.在某些时候收到以下错误,并且该过程重新开始:

2015-07-22T13:18:55.658 + 0000 I INDEX [rsSync]使用批量方法构建索引

2015-07-22T13:18:55.664 + 0000我完成了INDEX [rsSync]构建索引.共扫描了1591条记录.0秒

2015-07-22T13:18:56.397 + 0000 E STORAGE [rsSync] WiredTiger(24)[1437571136:397083] [20413:0x7f3d9ed29700],file:WiredTiger.wt,session.create:WiredTiger.turtle:fopen:打开太多档

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync] 8 24:打开文件太多

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync]初始同步尝试失败,剩余9次尝试

同一台机器之前运行的是2.6.3版本,没有任何打开文件限制问题.我知道wiredTiger可能会创建更多的文件,所以它必须是它,但它是否会同时打开它们?

以供参考:

cat/proc/sys/fs/file-max

10747371

在/etc/init.d/mongod中配置为:

ulimit -n 64000

根据文档,似乎mongo为每个数据文件保存文件描述符.与在wiredTiger中一样,这导致每个集合的文件+每个索引的文件,根据我们的用例计算,可以加起来超过700K.

所以我可以将ulimit更改为700000或更高,但我想知道这是否是最正确的解决方案,以及存在哪些替代方案.

mongodb wiredtiger

5
推荐指数
1
解决办法
2708
查看次数

在 $facet 中使用 $sort 和 $limit 时 Mongo 聚合速度较慢

我注意到在看似相同的总体上存在巨大的性能差异,至少在概念上是这样。测试是在一个简单的集合结构上进行的,该结构有一个 _id、一个名称和一个createdAt,但其中有 2000 万个。在createdAt上有一个索引。它托管在 mlab 集群上,版本为 3.6.9 WiredTiger。

我正在尝试使用聚合进行简单的分页,我知道我可以使用查找和限制,但我喜欢向管道添加更多元素,我给出的示例非常精炼。

db.getCollection("runnablecalls").aggregate([
         {
          $facet: {
            docs: [
                { $sort:  {createdAt: -1} },
                { $limit:  25 },
                { $skip:  0 },                                
            ],
            page_info: [
              { $group: { _id: null, total: { $sum: 1 } } 
              }
            ],
          }
        }                           
      ])
Run Code Online (Sandbox Code Playgroud)

这几乎需要40s. 现在,如果我将$sort和移到$limit刻面之外,则需要0.042s.

db.getCollection("runnablecalls").aggregate([
        { $sort:  {createdAt: -1} },
        { $limit:  25 }, 
        {
          $facet: {
            docs: [           
                { $skip:  0 },                
            ],            
            page_info: [
                { …
Run Code Online (Sandbox Code Playgroud)

database performance mongodb wiredtiger

5
推荐指数
1
解决办法
3750
查看次数