Docs 菜单

Docs 主页开发应用程序MongoDB Manual

生产环境注意事项(分片集群)

在此页面上

  • 性能
  • 读取关注
  • 写关注
  • 仲裁节点
  • 备份和恢复
  • 数据段迁移
  • 提交期间的外部读取
  • 更多信息

您可以在分片集群上执行多文档事务。

以下页面列出在分片集群上运行事务特定的问题。这些问题是对生产注意事项中列出的问题的补充。

针对单个分片的事务应具有与副本集事务相同的性能。

影响多个分片的事务产生更大的性能成本。

注意

在分片集群上,如果涉及的任何分片包含仲裁节点,跨多个分片的事务将出现错误并中止。

要指定时间限制,请在commitTransaction上指定 maxTimeMS限制。

如果未指定 maxTimeMS,MongoDB 将使用 transactionLifetimeLimitSeconds

如果指定了 maxTimeMS 但导致事务超过 transactionLifetimeLimitSeconds,MongoDB 将使用 transactionLifetimeLimitSeconds

要修改分片集群的 transactionLifetimeLimitSeconds,必须为所有分片副本集节点修改该参数。

多文档事务支持 "local""majority" "snapshot" 读关注级别。

对于分片集群上的事务,仅 "snapshot" 读关注在多个分片之间提供一致的快照。

有关读关注和事务的更多信息,请参阅事务和读关注

您无法在具有将 writeConcernMajorityJournalDefault 设置为 false 的分片(例如具有使用内存中存储引擎的投票节点的分片)的分片集群上运行事务。

注意

无论为事务指定的写关注如何,分片集群事务的提交操作都包含一些使用 {w: "majority", j: true} 写关注的部分。

如果任何事务操作读取或写入包含仲裁节点的分片,则写入操作跨越多个分片的事务将出现错误并中止。

警告

要使用mongodumpmongorestore 作为分片集群的备份策略,您必须停止分 片集群负载均衡器 ,并使用fsync 命令或 上的db.fsyncLock() mongos方法来阻止写入集群在备份期间。

分片集群还可以使用以下协调备份和恢复流程之一,以确保跨分片事务的原子性:

数据段迁移在某些阶段获取独占集合锁。

如果正在进行的事务对某集合有锁,并且涉及该集合的数据段迁移开始,则这些迁移阶段必须等待该事务释放该集合的锁,从而影响数据段迁移的性能。

如果数据段迁移与事务交错(例如,事务在数据段迁移进行中启动,并且迁移在事务锁定集合之前完成),则事务在提交期间出错并中止。

根据两个操作的交错方式,可能出现一些错误(错误消息已缩写):

  • an error from cluster data placement change ... migration commit in progress for <namespace>

  • Cannot find shardId the chunk belonged to at cluster time ...

提示

另请参阅:

在提交事务期间,外部读取操作可能会尝试读取将由该事务修改的相同文档。如果事务写入多个分片,则在尝试跨分片提交期间:

  • 使用读关注 "snapshot""linearizable" 的外部读取会等到事务的所有写入都可见。

  • 因果一致会话中的外部读取(包括 afterClusterTime 会话)会等到事务的所有写入都可见。

  • 使用其他读关注的外部读取不会等到事务的所有写入都可见,而是读取文档的事务前版本。

提示

另请参阅:

另请参阅生产环境注意事项

← 生产环境注意事项