采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,在课程中您有提到说
在RU,RC级别下的快照读,之所以是每次都能读取到最新的数据,是因为在RC和RU级别下,每一次调用快照读的时候都会创建一个新的快照(read-view)
而我的疑问是,在RC和RR级别下 就算每一次都创建了新的快照,我不管创建几次快照,只要我还在同一个事务内,我当前要修改的数据的DB_TRX_ID并不会发生变化呀。那得到的read-view不就又是一样了?
希望祥仔可以帮忙解答疑惑~,感谢
同学好,虽然每次打开read_view的时候,当前的DB_TRX_ID不会发生变化,但是请注意我视频说的,是递归取获取到最小的id,也就是最稳定的版本。。所以取出来的DB_TRX_ID不是当前的呀,而是已经发生修改的。具体你可以研究一下源码
https://blog.csdn.net/joy0921/article/details/80128857
个人暂且的想法是,从结果反推,RC级别下每次快照读,都会进行一个新的快照,从而保证可以读到最新的数据,
那每次进行快照的时候,肯定有一个变量是变化的,而这个变量不应该是老师课上讲的 ”修改数据的DB_TRX_ID " 因为对于同一个事务而言,不管什么时候快照,当前的事务ID并不会发生变化。
---
我认为在每次快照中会发生变化的变量是,当前活跃事务的最大id,应该是拿这个id去和undo log里面的DB_TRX_ID 去对比,如果比当前DB_TRX_ID小的话,就通过DB_ROLLBACK_POINTER 继续向下寻找,从而确定这一次的read-view 数据可见范围 是什么
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
2.2k 27
3.2k 22
1.6k 15
1.8k 14
1.6k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号