我有一个 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 文件。