问题标签 [wiredtiger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
138 浏览

mongodb - MongoDB 锁定


我的 mongodb 批量更新写入使用 mongo java 驱动程序很慢,然后我检查了 mongodb 日志文件,我观察到全局和集合级别锁定很高。
我修改了两个不同的索引,但仍然存在锁定问题。
如果您知道任何一个原因,请告诉我
MongoDB 日志:


2017-10-11T19:04:40.941+0530 我写 [conn1164] 更新 ghana.data_usage_summary 查询:{ MS:“6028150899”,MN:1,CD:2,CO:1,DI:1,MI:1706,ST : "14000Kbps", VT: "Science_Fiction", SI: 1, AD: 1, PI: 1, YM: 201710 } planSummary: IXSCAN { MS: 1.0, ST: 1.0, YM: -1.0 } update: { $inc: { DY.SU.10:1,DY.TO.10:0,DY.FL.10:0,HR.18.FL.10:0,WK.FL.1:0,MO.FL.0:0 , HR.18.SU.10: 1, HR.18.TO.10: 0, WK.SU.1: 1, WK.TO.1: 0, MO.SU.0: 1, MO.TO.0 : 0 } } keysExamined:1 docsExamined:1 nMatched:1 nModified:1 numYields:1 locks:{ Global: { acquireCount: { r: 20, w: 20 } }, Database: { acquireCount: { w: 20 } },收集:{acquireCount:{w:20}}}148ms
2017-10-11T19:04:41.035+0530 I COMMAND [conn1165] command ghana.$cmd command: update { update: "data_usage_summary",ordered: false, bypassDocumentValidation: true, updates: 1000 } numYields:0 reslen:59 locks :{全局:{acquireCount:{r:1021,w:1021}},数据库:{acquireCount:{w:1021}},集合:{acquireCount:{w:1021}}}协议:op_query 1046ms
2017-10- 11T19:04:41.663+0530 I COMMAND [conn1166] command ghana.$cmd command: update { update: "data_usage_summary", ordered: false, bypassDocumentValidation: true, updates: 1000 } numYields:0 reslen:59 locks:{ Global: { acquireCount: { r: 1032, w: 1032 } }, Database: { acquireCount: { w: 1032 } }, Collection: { acquireCount: { w: 1032 } } } protocol:op_query 1316ms


谢谢
Shankar

0 投票
1 回答
48 浏览

mongodb - MongoDB:使用 WiredTiger 存储更新索引文件

更新索引字段对wiredTiger 有任何影响吗?我正在经历以下问题。问:添加索引 { a : 1 } 可能会降低以下哪个操作的速度?检查所有适用。

A. db.collection.update( { b : 456 }, { $inc : { a : 1 } } );

我相信上述答案对于 MMAPV1 是正确的,但在 WiredTiger 中不应该有任何影响,因为 WiredTiger 使用不可变的文档标识符而不是存储位置地址。有人可以证实我的理解。

0 投票
2 回答
411 浏览

mongodb - Mongodb 3.2wiredTiger 定期 100% 磁盘利用率的大量写入

我的 mongodb 3.2.18 独立实例有 128GB 内存,wiredTiger,亚马逊 ebs io1 ssd 磁盘 xfs 格式。100% 的工作是写入。我在一个数据库中有 5 个集合,每个集合大约有 8 亿个文档。

对于每 30-60 秒,我刚刚发现 iostat 有 10seconds-15senconds 100% 的磁盘利用率,并且我看到 mongostat aw 的相同数据在 10-15s 左右增加到 20-50 。我不认为我的写入量真的很高,但我想知道这种周期性高磁盘利用率的根本原因是什么。它对我的写入速度影响很大。以下是统计数据。

来自 iostat 的正常统计信息

来自 iostat 的 100% 磁盘利用率

mongostat aw 增加到 40 持续 10 秒

0 投票
0 回答
57 浏览

mongodb - 是否有任何已编译的 Windows 的 WiredTiger 可执行工具文件?

我需要它来从损坏的 MongoDB 中挽救数据

提前致谢

0 投票
0 回答
913 浏览

mongodb - 如果 mongod 没有启动导致集合损坏的原因,如何删除 mongodb 集合?

我无法启动 mongod 的损坏收集原因,mongod.log 说:

命令 mongod --repair 没有帮助。如果 mongo shell 无法连接到 mongod,我该如何删除或修复这个集合?

0 投票
1 回答
330 浏览

mongodb - 如何检测我的查询结果是否从 WiredTiger 缓存中检索到?

我使用的是 Mongo 3.4 版,存储引擎是 WiredTiger。正如文档所说,Mongo 确实使用缓存来存储适合 RAM 的工作集。

所以我的问题是

  1. 有什么方法可以检查我的查询结果是否来自缓存?
  2. 如果我的工作集大于 RAM 怎么办?Mongo 会清除缓存,还是会驱逐一些数据?
  3. 任何关于学习 Mongo 缓存机制的好资源的建议
0 投票
1 回答
1519 浏览

database - 从 WiredTiger 文件恢复损坏的 mongo db

所以这是我的场景:

  • 今天我的服务器由我们的主机重新启动(acpi 关闭)。
  • 我的 mongo 数据库是一个简单的 docker 容器(mongo:3.2.18)
  • 由于未知原因,容器在重新启动时没有重新启动(restart: always在 docker-compose 中设置)。
  • 我启动它并注意到卷映射消失了。
  • 我将它们恢复到旧路径,重新启动 mongo 容器,它启动时没有错误。
  • 我连接到数据库,它完全是空的。

我也试过了db.repairDatabase();,没有效果。

现在我的_data目录包含很多 *.wt 文件等等。(文件列表

我发现collection-0-2713973085537274806.wt它的文件大小约为 390MiB。

假设它的大小,这可能是我需要恢复的数据。

有什么方法可以恢复这些数据?

wt salvage我已经根据这篇文章尝试了我的运气,但我无法让它运行 - 仍在尝试。

我知道备份,备份,备份!遗憾的是,这个数据库没有备份。

相关的 GitHub 问题,包含软件的详细信息。


更新:

我能够使用该WiredTiger Data Engine工具创建一个 .dump 文件。但是我无法将其导入 mongoDB。

0 投票
1 回答
1891 浏览

mongodb - WiredTiger 和就地更新

我有一组用户。每个用户都有一个经常更新的“地理位置”字段(每次用户显着移动时)。由于我希望在更新时在文档级别而不是集合级别上实现并发,因此我使用的是 WiredTiger 存储引擎。

我了解到,使用 WiredTiger,文档中的每次更新都会创建一个新文档:

http://learnmongodbthehardway.com/schema/wiredtiger/

WiredTiger 不支持就地更新

然而,这篇文章还说“即使 [WiredTiger] 不允许就地更新,它仍然可以在许多工作负载上表现得比 MMAP 更好”。这是什么意思?使用 WiredTiger 时必须注意的确切含义是什么?例如,如果没有就地更新,数据库大小会快速增长吗?还有其他需要注意的事情吗?

我还了解到 MongoDB 3.6 中的 WiredTiger 添加了存储增量的功能,而不是重写整个文档 ( https://jira.mongodb.org/browse/DOCS-11416 )。这到底是什么意思?

注意:另外我不明白的是,现在大多数(如果不是全部)硬盘驱动器的扇区大小为 4096 字节,因此您不能仅写入硬盘驱动器 4 字节(例如),而是必须写入完整块4096 字节(所以先读取它,更新其中的 4 个字节,然后再写入)。由于大多数文档通常小于 4096 字节,这是否意味着在任何情况下都需要重写整个文档(即使使用 MMAP)。我错过了什么?

0 投票
1 回答
1387 浏览

database - MongoDB - WiredTiger 快照与锁定

我不完全理解这两个功能在(WiredTiger)MongoDB 程序中如何相互关联:

1) WiredTiger 快照

2) 数据锁定

如果使用 WiredTiger 引擎的每个读取操作在读取时都提供了数据库级别的“快照”(以创建一致性(ACID 中的 C),那么为什么我们还需要锁定?让我们举个例子。

我在文档级别执行查询(读取操作)。好的,所以我知道我得到了数据库级别的快照,因此即使另一个用户同时写入同一个文档并更新它,我的数据也是一致

那么在这一点上,在该文档上设置共享锁有什么用,它会阻止对该文档的所有写入(独占)操作,直到共享锁被释放?如果我实际上使用的是在阅读时提供给我的文档快照,那么在我阅读该文档的同时写入该文档可能会出现什么问题?为什么我会关心在我的读取操作期间文档是否被锁定?我已经有了那个时间点的(一致的)数据,不是吗?

我显然在这里错过了一个关键概念......有什么帮助吗?

谢谢。

0 投票
0 回答
316 浏览

mongodb - MongoDB 会在压缩文档后对磁盘上的数据进行碎片整理吗?

我有数百万个文档的 MongoDB 数据库。为了减小它的大小,我将制定一项任务,在每个文档到期时定期删除它们的某些字段(但不是文档本身)。

我不确定引擎如何将数据存储在磁盘上,那么 MongoDB 会在磁盘上压缩数据库,整理数据吗?这对 MongoDB 来说是正确的吗?

我正在使用带有 WiredTiger 的 MongoDB 3.2.4。

PS我不是问释放空间给OS,我问的是MongoDB内部的数据存储,会不会容易碎片化?我应该做一些额外的碎片整理吗?