OpenEdge 11.7序列生成重复值问题咨询
OpenEdge 11.7 跨机器序列重复问题分析
问题原因
OpenEdge 11.7的序列默认启用缓存机制:客户端会一次性从数据库服务器获取一段连续的序列值缓存到本地,后续调用NEXT-VALUE直接从本地缓存取值,直到缓存耗尽再向服务器申请下一段。
你遇到的跨机器重复问题,本质是缓存序列的竞态条件:当两台不同PC的客户端几乎同时发起序列请求时,服务器的序列锁机制未能及时拦截并发请求,导致两个客户端拿到了相同的起始缓存值。而同一PC的两个实例,由于进程调度存在时间差或本地连接的上下文同步机制,请求不会完全同时触发,因此未出现重复。
至于重复后下一个编号跳2,是因为两个客户端各自使用了本地缓存的下一个值,同时服务器端的序列已被两个请求各推进了一次缓存步长,导致下一次申请时直接跳到了4。
服务器编译程序是否会出现该问题
会。只要是跨机器的多个客户端(包括服务器上运行的编译程序)同时并发调用NEXT-VALUE,且序列使用默认缓存配置,就有可能触发该竞态条件。
内容的提问来源于stack exchange,提问作者Ben Wildie
相关产品推荐
相关产品推荐

