SCN的Broadcast-On-Commit和Lamport:算法[转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4303 | 回复: 0   主题: SCN的Broadcast-On-Commit和Lamport:算法[转帖]        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2011-7-23 18:09:36 | [全部帖] [楼主帖] 楼主

这几天我有一个客户的数据库出现了这样的情况,在一个3节点的RAC上,其中一个节点上修改的数据,马上在另外一个节点上查,发现有千分之5左右的数据没有更新,要过一会才能查到正确的结果。这造成了应用软件的业务逻辑错误。

通过分析,发现是SCN的传播机制导致。由于Oracle 9i缺省的传播模式是lamport算法,SCN在实例间传递是通过GCS MESSAGE来传递的,因此就会造成一定的延时。LAMPORT算法可以减少实例间同步SCN所造成的性能问题,但是在变更十分频繁的系统中,可能出现上述的问题。因此在这种情况下,客户首先把这个应用全部部署在一个节点上,以避免业务逻辑的问题。如果无法通过应用调整来解决,那么就必须调整MAX_COMMIT_PROPAGATION_DELAY来改变传播算法了。一般来说这个参数在9i和10.1的缺省值是700(TRU64除外)也就是7秒钟,实际上这是一个上限了,因为lck每隔3秒钟会有一个例行的信息包交换,一般情况下,3秒钟肯定会完成一次scn传播。这个参数,如果设置为0-99,那么数据库会选择Broadcast-On-Commit算法,由LGWR来传播SCN。一般来说我们可以设置为0-99或者保留原有的值不懂,没有十分可靠的分析证据的情况下,建议不要设置100-700之间的值。

10.2开始,lgwr传播SCN的算法有了很大的改进,因此10.2缺省使用Broadcast-On-Commit,这个参数的缺省值也变为0.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论