当碎片变得忙时,Mongos连接会减慢

时间:2012-02-28 21:58:22

标签: mongodb

我看到我的mongos的行为,当我的一个分片上的事件排队时,C#驱动程序SendMessage需要更长的时间,而mongos必须将调用转发到该分片。 SendMessage不应该独立于分片的繁忙程度而且我应该能够根据我的网络连接速度排队,而不是分片的繁忙程度吗?

1 个答案:

答案 0 :(得分:1)

  

SendMessage不应该独立于分片的繁忙程度,我应该能够根据网络连接速度排队,而不是分片的繁忙程度?

MongoDB 使用缓冲区,但操作系统/网络堆栈有一个用于所有网络流量(和socket / connection )。

您真正在谈论的是分片服务器的网络缓冲区。你说“嘿,如果你很忙,那就没关系了,只需要这个请求”。但是,网络缓冲区不是无限长。在某些时候,缓冲区将满,并且该连接将直接停止接受更多数据,直到它清除为止。

如果您发送的操作/数据多于单个分片可以处理的数量,那么您的选项数量有限:

  1. 更多硬件(磁盘/内存)=>更多分片=>减少单个碎片的负荷
  2. 仔细检查您的分片密钥分配(虽然几乎无法更改
  3. 尝试一些manual chunking来减轻负担
  4. 不幸的是,这些都不是简单的解决方案。 MongoDB的优点在于它提供了分片数据的功能。但它没有处理“热”节点的自动化功能。如果知道哪些块是热的,那么你可以拆分它们,平衡器会移动它们,但是如果块中的数据没有改变,没有自动进程为你做这个。