我有一个Couchbase(v 2.0.1)群集,其中包含以下规范:
目前我在这个桶中有201.000.000个文件,只有200GB的磁盘在使用中.
我每分钟都会收到以下警告:
Metadata overhead warning. Over 51% of RAM allocated to bucket "my-bucket" on node "my-node" is taken up by keys and metadata.
Run Code Online (Sandbox Code Playgroud)
Couchbase文档说明了以下内容:
表示存储桶现在使用超过50%的已分配RAM来存储元数据和密钥,从而减少了可用于数据值的RAM量.
我知道这可能是一个有用的指标,我可能需要将节点添加到我的集群,但我认为这应该是不必要的,因为桶的可用资源量.
一般桶分析:

我怎么知道是什么产生了如此多的元数据?
有没有办法配置公差百分比?
小智 7
每个文档都有元数据和存储在内存中的密钥.元数据是56个字节.将其添加到平均密钥大小,并将结果乘以文档计数,以得出元数据和内存中密钥的总字节数.因此,所需的RAM受文档计数,密钥大小和副本数量(副本计数+ 1)的影响.您可以在http://docs.couchbase.com/couchbase-manual-2.5/cb-admin/#memory-quota找到详细信息.具体的公式是:
(documents_num) * (metadata_per_document + ID_size) * (no_of_copies)
Run Code Online (Sandbox Code Playgroud)
您可以从控制台(或通过REST或命令行界面)获取有关群集使用的用户和元数据的详细信息.查看"VBUCKET资源"部分.感兴趣的具体值是"RAM中的用户数据"和"RAM中的元数据".从截图中,您肯定会遇到内存容量.您处于低水位线,因此系统将从内存中弹出非活动副本文档.如果越过高水位标记,系统将开始从内存中弹出活动文档,直到达到低水位线.任何对弹出文件的请求都需要后台磁盘提取.从屏幕截图中,您的内存中只有不到5%的活动文档.
可以在2.5.1版本中更改警告元数据警告阈值.您可以使用https://gist.github.com/fprimex/11368614找到一个脚本.或者您可以简单地利用脚本中的curl命令并为群集插入正确的值.据我所知,这在2.5.1之前不起作用.
请记住,虽然这些警报(最大开销和最大磁盘使用量)现在是可调的,但它们是有原因的.以默认值命中这些警报(特别是在生产中)是引起关注的主要原因,应尽快通过增加每个节点上的RAM和/或磁盘或添加节点来处理.对于特殊情况,这些值是可调的.即使在开发/测试场景中,如果您发出这些警报,您的节点性能也可能会受到严重影响.例如,如果节点的RAM超过元数据占用的50%,则不要得出有关基准测试结果的结论.