Docs 菜单

Docs 主页开发应用程序MongoDB Manual

对分片键进行故障排除

在此页面上

  • 巨型数据段
  • 负载分布不均
  • 查询性能随时间推移下降

理想的分片键允许 MongoDB 在整个集群中均匀分布文档,同时促进常见的查询模式。不理想的分片键可能会导致以下问题:

  • 巨型块

  • 负载分布不均

  • 查询性能随时间推移下降

在下文中,您可以详细了解分片键的常见问题及其解决方法。

如果看到巨型数据段,则可能是分片键的关联基数不足,或者是分片键值的频率分布不均匀。

要增加分片键的关联基数或更改分片键值的分布,您可以:

  • 通过向现有键添加一个或多个后缀字段以提高关联基数,从而优化分片键

  • 使用具有更高关联基数的不同分片键对集合进行重新分片

要了解应该对集合进行重新分片还是优化分片键,请参阅更改分片键。

若要仅更改分片键值的分布,您还可以考虑使用哈希分片来更均匀地分布数据。

有关选择分片键的建议,请参阅选择分片键。

如果集群的负载分布不均匀,请检查分片键是否单调增加。作为单调递增字段的分片键会导致读写分布不均匀。

考虑在order_id字段上分片的 orders集合。 order_id是一个整数,每下一个订单就加一。

  • 新文档通常会写入相同的分片和数据段。接收写入的分片和数据段称为分片和数据段。分片会随时间而变化。分割数据段时,热数据段会移动到不同的分片以优化数据分布。

  • 如果用户更有可能与位于同一分片上的最近订单进行交互,则包含最近订单的分片将获得大部分流量。

如果您有单调递增的分片键,请考虑对您的集合重新分片。有关选择分片键的建议,请参阅选择分片键。

如果您的数据模型需要对单调变化的键进行分片,可以考虑使用哈希分片

如果您发现查询性能随着时间的推移而下降,则集群可能正在执行分散-聚集查询。

要评估您的集群是否正在执行分散-聚集查询,请检查最常见的查询是否包含分片键。

如果在查询中包含分片键,请检查分片键是否经过哈希处理。使用哈希分片时,文档不会按分片键字段值的升序或降序存储。对未按升序或降序存储的数据的分片键值执行基于范围的查询会导致分散-聚集查询性能降低。如果对分片键进行基于范围的查询是常见的访问模式,请考虑对集合进行重新分片。

如果您在最常见的查询中不包含分片键,则可以通过对集合重新分片来提高性能。有关选择分片键的建议,请参阅选择分片键。

← 查找分片键