增加 MongoDB 命名空间限制

3

我有一个运行着3个实例的MongoDB副本集,最近在日志文件中出现了以下错误:

error: hashtable namespace index max chain reached:1335
warning: hashtable namespace index long chain
ERROR: writer worker caught exception: too many namespaces/collections on: ...

我认为这里默认的 .ns(命名空间文件)大小限制不够,所以我包含了:

nssize = 32

针对每个副本集成员的配置进行更改。

这将使命名空间文件现在为32MB,而非默认的16MB(请参见http://docs.mongodb.org/manual/reference/configuration-options/#storage.nsSize)。

问题:

  1. 如何重建现有的命名空间文件以考虑新的限制?重新启动mongod服务器似乎没有起作用。
  2. 除了更改此限制之外,还有什么其他事情我应该做来摆脱这样的错误?

我相信ns文件是在创建数据库时分配的,因此您需要重新创建数据库才能使其生效。 - Sammaye
1个回答

2
如何重新构建现有的命名空间文件以考虑新的限制?重新启动mongod服务器似乎没有起作用。直到https://jira.mongodb.org/browse/SERVER-385出现,您需要重新创建数据库才能使其生效。
除了将此限制增加到32MB以上之外,还有其他应该做的事情吗?
实际上没有,除了增加它的大小以避免错误。
这里是10gen关于错误的讨论https://groups.google.com/forum/#!topic/mongodb-user/YrPqM85N4Mk,并提出了类似于你的结论:注意集合数量。

1
你能否解释一下 "renameCollection() 方法" 如何帮助这些命名空间?我出于好奇尝试了一下,但这只会影响一个集合,而命名空间的大小并不会改变。 - schedar
我对这个问题有疑问,如果一个NS的大小为16MB,那么插入的额外数据会发生什么? - tor9ado
@tor9ado 我从未尝试过,但我想你会从MongoDB收到一个断言错误。 - Sammaye
我观察到的是,将数据插入到集合中没有问题,但当我尝试插入到一个新的集合时,我看不到该集合。事实上,我已经使用nssize=64重新启动了Mongo,但它仍然无法工作。因此,我考虑进行CopyDatabase操作,您认为这是个好主意吗?对此有什么建议吗? - tor9ado
@tor9ado 即将询问澄清问题。是的,你需要复制你的数据库才能生效,nssize 是在创建数据库时生效的。 - Sammaye
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接