新聞中心
在上一篇《淺述當前模式讀與一致性讀的區(qū)別》文章里,我用2個特殊例子描述當前模式讀和一致性讀之間的區(qū)別,并提到了“如在事務(wù)啟動后到數(shù)據(jù)塊被讀取之間的這段時間內(nèi),相應(yīng)的數(shù)據(jù)塊發(fā)生了改變,那么可能就會有我們意想不到的事情發(fā)生”。而這樣的意想不到的結(jié)果可能能被我們接受,但也可能難以被接受。

10年的赤城網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整赤城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“赤城網(wǎng)站設(shè)計”,“赤城網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
我們先看一下以下2條UPDATE語句:
- 1:
- update t_test1 set lio=0 where object_id in (101,102);
- 2:
- update t_test1 set lio=(select lio from t_test1 where object_id = 101) where object_id = 102 and (select count(*) from t_test2 t1, t_test2 t2) > 0;
從邏輯角度來說,無論運行了那條語句,我們希望兩條記錄(object_id=101和object_id=102)的lio都相同。
然而,由于UPDATE語句會同時引入一致性讀和當前模式讀,并且由于這兩種讀之間存在時間差,我們可能會得到不希望出現(xiàn)的結(jié)果。
這里我們演示一個例子。
- 13:27:23 HELLODBA.COM>update t_test1 set lio=1 where object_id in (101,102);
- 2 rows updated.
- 13:29:06 HELLODBA.COM>commit;
- Commit complete.
- Session 1:
- 13:29:06 HELLODBA.COM>alter system flush buffer_cache;
- System altered.
- 13:29:11 HELLODBA.COM>-- Transaction 1 begin ---
- 13:29:11 HELLODBA.COM>update t_test1 set lio=(select lio from t_test1 where object_id = 101) where object_id = 102 and (select count(*) from t_test2 t1, t_test2 t2) > 0;
- 1 row updated.
- 13:29:25 HELLODBA.COM>commit;
- Commit complete.
- 13:29:25 HELLODBA.COM>-- Transaction 1 end ---
- 13:29:25 HELLODBA.COM>select object_id, lio from t_test1 t where object_id in (101,102);
- OBJECT_ID LIO
- ---------- ----------
- 101 0
- 102 1
- 13:29:25 HELLODBA.COM>
- Session 2:
- 13:29:11 HELLODBA.COM>-- Transaction 2 begin ---
- 13:29:16 HELLODBA.COM>update t_test1 set lio=0 where object_id in (101,102);
- 2 rows updated.
- 13:29:16 HELLODBA.COM>commit;
- Commit complete.
- 13:29:16 HELLODBA.COM>-- Transaction 2 end ---
在這個例子中,我們并發(fā)執(zhí)行了上面兩條語句,但最終得到一個和我們邏輯目標相左的結(jié)果。
事務(wù)1的SCN早于事務(wù)2的SCN,因此它用了一個快照數(shù)據(jù)(由一致性讀得到的老的數(shù)據(jù))來更新了當前數(shù)據(jù)(由當前模式讀得到的最新的數(shù)據(jù))。
我不能說這算不算MVCC的一個缺陷,但它最少已經(jīng)造成了邏輯混亂。
當前名稱:淺述當前模式讀與一致性讀續(xù)
標題網(wǎng)址:http://fisionsoft.com.cn/article/coiecpc.html


咨詢
建站咨詢
