级联事务的异步处理
可以将某些事务配置为跨所有相关记录进行级联。 这意味着父记录上的更改将对所有子记录上执行(向下级联)。 级联关系在表级别进行配置。 有关级联关系的详细信息,请参阅配置表关系级联行为。
同步与异步模式
默认情况下,级联操作作为同步事务执行。 对于同步级联事务,系统会识别所有受影响的记录。 在处理记录时,它们将被系统锁定。 完成所有更改后,记录将解锁,事务完成。
当长期事务由于服务器超时而失败时,具有大量记录的同步事务可能会导致环境性能问题。 记录将被锁定,以防止执行对相同记录进行操作的其他作业和用户事务执行。 而且,长期事务可能导致待处理事务和请求的积压,从而降低系统性能并可能导致工作停止。
如果同步级联操作正在进行时环境遇到超时或性能下降,则启用异步模式可以使您的环境受益。 两种模式之间的主要区别在下表中有介绍。
同步模式 | 异步模式 |
---|---|
在级联操作完成之前,无法对整个所选记录集(直接或级联)执行其他作业。 | 对于“分配”、“删除”和“合并”,将批处理级联更改,并且仅锁定批次内正在处理的记录。 这允许其他作业在完整的级联更改操作期间执行。 |
作业完成后,所有数据均显示新的所需值。 | 在作业运行时,每个完成的批都会显示所需的值。 这意味着在一段时间内,某些数据将显示所需值,而另一些数据将显示原始值,直到完成整个操作为止。 这称为“最终一致性”。 |
如果单个记录失败,则所有数据都将回滚到原始值。 回滚需要重新编辑所有已完成记录,这需要更多时间。 | 如果单个作业失败,则将重试多次以尝试完成。 如果无法完成该作业,则失败将记录在系统作业区域。 请注意,成功完成的记录将保留新值。 |
如果级联列表中的记录之一的值与预期值不同,则作业将失败并回滚。 例如,假设起始记录属于负责人 1,级联操作希望将其更改为负责人 2。 如果下游的相关记录之一已更改为负责人 3 或在发生锁定之前被删除,则整个作业将回滚。 | 对于“分配”,操作始终以覆盖模式工作,根据父子关系将当前值更改为新值。 没有由于原始值不匹配而导致的作业失败。 对于“删除”,如果缺少应该属于集的一部分的记录,则将截止故障点的所有记录视为已完成。 用户或管理员可以重新执行失败的作业,这样会重新计算作业,以便在无缺少的记录的情况下继续进行。 对于“合并”,如果缺少的记录存在问题,将重试执行作业,在没有缺少记录的情况下执行。 |
异步模式
当级联事务达到包含记录的阈值时,将异步处理这些记录。
Operation | Threshold |
---|---|
分配 | 1,000 条记录 |
Delete | 5,000 条记录 |
合并 | 1,000 条记录 |
跟踪异步操作进度
管理员可以在设置区域监视异步操作的处理。
在导航区域选择环境。 然后选择所需环境。
选择设置,展开审核和日志,然后选择系统作业。
级联操作显示在系统作业视图中。
要仅查看级联操作,请在视图选择器中选择级联操作。
级联操作具有以下任一状态:
- Completed:级联事务的所有批次都已成功完成。
- 正在进行:级联更改正在进行中。
- Failed:多次重试后,某些级联更改失败。
备注
无法取消异步级联作业。 您必须通过指示已完成或失败状态来等待它完成。
打开级联操作将显示:
特定事务进行了多少次重试。
创建和完成的日期和时间。
谁创建的作业。
与作业相关的任何消息,例如失败原因或异常。
哪些级联事务可以异步处理?
可以以异步方式处理分配、删除和合并级联事务。
备注
其他事务(如共享/取消共享、汇总视图和重定父级)的异步处理现在正在审查中。
异步级联操作问题疑难解答
当同步级联作业失败时,将停止并回滚所有更改,以使所有记录都不包含请求的更改。 这个过程可能需要大量时间,因为回滚的时间可能和原始尝试一样长,而重试操作则会从第一条记录重新开始。
如果失败,异步操作会重试多次。 在大多数情况下,重试作业会导致成功,作业可以继续完成。 在极少情况下,重试无法解决问题。 当发生这种情况时,异步作业会暂停,管理员和用户可以解决问题,然后从暂停点恢复作业。
级联操作的常见失败原因
执行级联操作时失败的常见原因包括:
- 插件异常
- 安全异常
插件异常
将插件添加到级联操作的处理是为了在对记录进行更新时执行特定操作,如发送电子邮件或对其他记录触发其他更新。 插件可能是第三方提供的或是内部开发的。 如果插件生成异常,级联操作将失败。 重试可能会解决问题,具体取决于异常的原因。 如果由于失败而暂停异步级联作业,请验证与操作关联的所有插件,以确保它们没有生成异常。 修复后,可以恢复作业。
安全异常
当执行级联操作的用户没有足够的特权对一条或多条记录进行更改,或者用户已禁用或从系统中移除,会出现安全异常。
如果该用户仍然留在系统中,请验证其是否具有修改记录所需权限,以及其是否有权执行指定的操作。 解决此问题后,恢复作业。
如果已禁用用户或从系统中删除用户,则重新启用或重新添加用户将解决此问题,并且可以恢复作业。 但是,如果必须删除或禁用该用户,或者该用户不应具有操作或记录的权限,则应取消作业,然后由具有适当权限的用户重新启动该作业。
有关失败作业的任何其他问题,请联系 Microsoft Support。 更多信息:支持概述
级联合并期间的文件删除问题疑难解答
如果因为在作业运行期间删除了文件导致级联合并操作失败,可以跳过培养检查。 这样,即使在后台运行作业期间某人从集合中删除了记录,您也可以继续进行合并。 当您选择合并记录时,请清除合并窗口底部的默认情况下启用培养检查,取消选中此项将忽略培养检查选项。
合并记录示例
假设您的一个客户与联系人之间有关系,而后者则与订单有关系。 您希望合并两条客户记录。
如果作业运行成功,则合并会将所有相关联系人及其订单分配给目标客户。
如果在记录合并过程中另一位用户删除了相关的联系人记录,但与联系人记录有关的订单记录仍然存在,则合并作业将失败,因为缺少父子记录。 如果您在记录合并过程中选择跳过父子检查,则会将具有缺少的联系人记录的订单合并到目标客户记录中。 但是,不会将任何相关联系人记录分配给目标客户,并且作业将完成。
合并所导致的阻止其他访问更改的锁定
级联合并操作向从属表的新负责人授予访问权限。 为完成此任务,级联合并操作访问并更改需要锁定的主体对象表。 如果合并操作包含很多记录(基于级联关系),此锁定可能会存在很长时间。 如果某个操作合并运行时尝试授予或撤销对不相关记录的访问权限,这可能会导致出现错误。 如果发生这种情况,请尝试在非工作时间执行合并,以减少阻止。