为什么日志记录在 mongodb 中占用这么多空间?

为什么日志记录在 mongodb 中占用这么多空间?

我有一个 mongodb 数据库,大约占用 1GB 空间。当我的服务器空间不足时,我感到很惊讶,然后我意识到日志占用了 3GB。

文档说“一旦 MongoDB 应用了日志文件中的所有写操作,它就会删除这些文件”,但事实似乎并非如此,因为数据库已同步并且日志记录是整个数据库的 3 倍。

我怎样才能删除这些日志文件并配置系统以使用更少的空间?

答案1

您引用的文档是正确的,如果您运行db.fsyncLock()命令会将所有更改刷新到磁盘,日志文件也将被删除。只要你运行db.fsyncUnlock()当另一个写入操作到达时,这些日志文件将重新出现:

以下是测试系统上的一个简单示例:

> db.foo.insert({"id" : 1})

日志目录如下所示:

$ls /usr/local/var/mongodb/journal/
j._1 lsn
$

现在,让我们将其锁定并将所有内容刷新到磁盘:

> db.fsyncLock()
{
    "info" : "now locked against writes, use db.fsyncUnlock() to unlock",
    "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
    "ok" : 1
}

日志目录现在为空:

$ls /usr/local/var/mongodb/journal/
$

解锁,插入:

> db.fsyncUnlock()
{ "ok" : 1, "info" : "unlock completed" }
> db.foo.insert({"id" : 1})

现在我们又有了日志文件:

$ls /usr/local/var/mongodb/journal/
j._2 lsn
$

因此,如果您没有锁定,将数据库刷新到磁盘并且不断有写入数据,那么您将始终拥有日志文件。

类似地,当您干净地关闭mongod实例时,日志文件将在磁盘刷新成功完成后被删除。

如果你想让日志文件更小,你可以考虑使用--smallfiles选项。这将为您提供 3 x 128MB 文件,而不是 3 x 1GB 文件。

相关内容