我们发现了一些可能导致分片多文档事务返回不正确数据并可能遗漏写入的问题。这些问题可能在以下任一情况下出现:
同时执行以下任一操作时:
MongoDB 4.4.29,5.0.25,6.0.14,7.0.8 和 Rapid Release 7.3.1 包含这些问题的修复。
如果所引用的数据受到同时执行并修改分片元数据的命令的影响,则分片多文档事务可能会错过读取和写入。由于可查询加密隐式地利用多文档事务,因此此功能在分片环境中容易受到影响。
以下条件是这些问题的必要前提(所有条件都必须满足):
因此,这些问题会导致以下情况:
请参阅下文以获取有关可以修改分片元数据的特定命令的更多信息
MongoDB 4.4.29,5.0.25,6.0.14,7.0.8 和 Rapid Release 7.3.1 包含这些问题的修复。
如果您的作业在满足上述条件的分片集群上使用多文档事务,我们建议您升级到 MongoDB 版本 4.4.29、5.0.25、6.0.14、7.0.8 或快速发布 7.3.1(或更高版本)。
如果您使用 MongoDB Atlas,您的集群已升级。
如果您无法立即升级
避免在多文档事务与修改分片元数据的同时发布命令。具体来说,请避免使用以下命令
通过使用 sh.stopBalancer() 命令禁用分片集群平衡器。
尽快升级到 MongoDB 版本 4.4.29、5.0.25、6.0.14、7.0.8 或快速发布 7.3.1(或更高版本)。
使用 sh.startBalancer() 重新启用平衡器。
请参阅下面的修复部分。
以下部分提供了特定功能使用的指南。所有涉及的命令都在配置数据库的 更改日志集合 中记录条目。可以通过检查更改日志集合来确定这些命令可能发布的时间。此集合默认限制为 200MB;用户可以查阅备份以获取更多历史记录。请查阅与您的环境相关的部分,并在需要时检查更改日志集合。
可查询加密 可受 SERVER-84723、SERVER-87061 和 SERVER-82353 的影响。
如果以下所有条件都满足,则使用 可查询加密 的环境可能会受到影响
如果您是 可查询加密 的用户并且符合上述标准,请联系 MongoDB 支持 以获取进一步的帮助。
显式利用分片多文档事务的客户可能会受到以下任何一项的影响:SERVER-77506,SERVER-84723,SERVER-87061 或 SERVER-82353。
如果一个环境的工作负载显式利用了多文档事务,那么只有当以下所有条件都满足时才可能会受到影响:
如果您的环境和工作负载符合这些标准,我们建议您
审查您的应用程序,重点关注事务中遗漏的读取或写入如何影响您的应用程序。请参阅附录中链接的特定票据,以更好地了解这些问题如何体现。
确定上述任何元数据修改操作是在这些多文档事务引用的集合上发出的时间。请参阅以下附录以获取关于上述问题如何体现的更多详细信息。
咨询您的应用程序日志以评估哪些文档可能受到影响。
审查这些文档的内容以评估它们是否从您应用程序的角度看是逻辑上一致的。您还可能希望考虑如果读取或写入可能没有正确应用,其他集合/文档可能受到的影响。
有关本节总结的问题的更多信息,请参阅以下单独的票据