单事务单用户场景下Salesforce行锁错误成因咨询
Salesforce单用户单事务下行锁错误的原因解析
首先明确:无外部调用或异步作业的用户操作,确实运行在单线程单事务中,但这并不代表不会触发行锁错误,以下是几个核心原因:
大量子记录的隐式锁过载
当更新主明细关系的父记录时,Salesforce会自动尝试锁定所有关联的子记录。如果子记录数量过多,哪怕是同一事务内,锁的逐个获取过程可能超出系统的锁资源阈值或超时限制——系统不会一次性为所有子记录分配锁,而是处理过程中逐步申请,当数量达到一定规模,就会触发锁错误,这和多用户场景的锁冲突逻辑不同,但本质都是锁资源的过载。自动化逻辑的嵌套锁请求叠加
更新操作可能触发触发器、流程、验证规则或共享规则计算,这些内部逻辑可能在同一事务内重复请求同一记录的锁,或者跨对象触发连锁的锁操作。比如父记录更新触发触发器批量更新子记录,子记录的更新又触发自身的自动化,导致锁请求叠加,最终触发系统的锁保护机制。沙箱环境的隐性干扰
即使是个人沙箱,也可能存在后台维护进程、元数据同步残留的锁,或者测试数据本身的异常(比如子记录存在循环依赖、重复外键关联),这些隐性因素可能干扰锁机制的正常运行,导致单用户场景下也出现锁错误。
至于将代码放到队列(异步作业)后问题解决,原因在于:异步事务是独立的、分批次处理的,Salesforce对异步事务的锁分配逻辑更宽松,会拆分批量记录为多个小批次获取锁,同时异步事务的锁超时阈值更高,能避免单事务内一次性锁定大量记录带来的资源过载问题。
内容的提问来源于stack exchange,提问作者rjp
相关产品推荐
相关产品推荐

