【问题标题】:Mongodb: Does not seem to respect capped size limitMongodb:似乎不尊重上限大小限制
【发布时间】:2014-12-21 08:00:56
【问题描述】:

在win2012上运行mongodb

Mongo db 版本 v2.6.4

我们的集合是用这个参数创建的:

上限:true,大小:500000000000 // 500 GB

但仅保存这一个集合的数据目录已增长到 720gb。

在这个 mongo 服务器上根本没有使用复制。

如何将数据目录保持在 ~ 500 GB?

这个数据库有时确实会获得大量插入,但我们还需要控制最大大小(并让它丢弃旧数据)。

上限大小是否可能不包括索引?

或者我应该考虑其他开销吗? (以及如何?

还是?

数据库统计

> db.stats
function (scale){
    return this.runCommand( { dbstats : 1 , scale : scale } );
}
> db.stats()
{
        "db" : "logging",
        "collections" : 3,
        "objects" : 289637086,
        "avgObjSize" : 2076.3166847770317,
        "dataSize" : 601378314192,
        "storageSize" : 606012620432,
        "numExtents" : 305,
        "indexes" : 12,
        "indexSize" : 147827443456,
        "fileSize" : 776943435776,
        "nsSizeMB" : 16,
        "dataFileVersion" : {
                "major" : 4,
                "minor" : 5
        },
        "extentFreeList" : {
                "num" : 0,
                "totalSize" : 0
        },
        "ok" : 1
}
>

我们用来创建集合的命令:

db.createCollection("LogItem", { capped:true, size:500000000000 })

所以我们写入的集合是使用 capped cmd 创建的。这就是所有空间的所在

由于磁盘空间不足,我无法执行 db.collection.stats()...

谢谢!

【问题讨论】:

  • 您能否将数据库的db.stats() 输出包含在上限集合中?如果您可以发布指向包含磁盘上文件大小的目录列表的 pastebin/gist 链接,这也会很有帮助。数据目录将至少包含 MongoDB 2.6 中的一个其他数据库(local 数据库),如果您启用了复制,该数据库可能会很大。例如,为副本集节点创建的操作日志 (oplog) 是 local 数据库中的一个特殊上限集合,最多分配 5% 的可用磁盘空间(大小在 1GB 和 50GB 之间)。
  • @Stennie 谢谢!这可能有助于查明问题。请参阅修订后的 OP。
  • @Stennie 这个问题很开放,恐怕。见修订的 OP

标签: mongodb


【解决方案1】:

已解决

问题?好吧,您可以将集合创建为上限,并且确实有效....但是在创建新数据库时,如果传入连接正在发送数据,则在您有机会将其创建为上限之前自动创建新数据库,并且你最终会得到......一个不封顶的集合。

解决方案:

当 mongo 离线时,通过将其设置为非标准端口的配置将其临时恢复。创建集合。然后在普通端口重启mongo,一切正常。

【讨论】:

    【解决方案2】:

    我相信您已经将多个不同的概念合二为一。 “上限”的概念适用于单独的集合——它们驻留在数据库中。数据库是磁盘上的一个文件,由 1 个或多个集合组成。每个数据库文件都有数据加上一些增长空间以及删除数据中的一些漏洞等。 Capped collections 没有索引——所以对于检索,如果你真的想创建一个 500gb 的集合,性能将是可怕的。 为了测试,你可以做一个大小为 1mb 的有上限的集合,用数据填充它,并验证一旦它达到一定数量的文档,它就不会增长——但这并不意味着包含这个集合的数据库不会增长超过所需的大小 - 会有一些开销。

    【讨论】:

    • @alnerdev 谢谢。我对 OP 中的术语有点草率,现在我已经清理了。
    • 除非你指的是oplog(这是一个特殊的用于复制的封顶集合),封顶集合支持索引。使用上限集合有明确的警告——请参阅 MongoDB 手册中的Recommendations and Restrictions
    • @alnerdev -- 我在 OP 中很草率,但已经把它清理干净了(在我的脑海里,在帖子里)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多