成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺述當前模式讀與一致性讀續

數據庫 Oracle
在上一篇《淺述當前模式讀與一致性讀的區別》文章里,提到了“如在事務啟動后到數據塊被讀取之間的這段時間內,相應的數據塊發生了改變,那么可能就會有我們意想不到的事情發生”。而這樣的意想不到的結果可能能被我們接受,但也可能難以被接受。

在上一篇《淺述當前模式讀與一致性讀的區別》文章里,我用2個特殊例子描述當前模式讀和一致性讀之間的區別,并提到了“如在事務啟動后到數據塊被讀取之間的這段時間內,相應的數據塊發生了改變,那么可能就會有我們意想不到的事情發生”。而這樣的意想不到的結果可能能被我們接受,但也可能難以被接受。

我們先看一下以下2條UPDATE語句:

  1. 1:    
  2. update t_test1 set lio=0 where object_id in (101,102);    
  3. 2:    
  4. 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語句會同時引入一致性讀和當前模式讀,并且由于這兩種讀之間存在時間差,我們可能會得到不希望出現的結果。

這里我們演示一個例子。

  1. 13:27:23 HELLODBA.COM>update t_test1 set lio=1 where object_id in (101,102);    
  2.     
  3. rows updated.    
  4.     
  5. 13:29:06 HELLODBA.COM>commit;    
  6.     
  7. Commit complete.    
  8.     
  9. Session 1:    
  10. 13:29:06 HELLODBA.COM>alter system flush buffer_cache;    
  11.     
  12. System altered.    
  13.    
  14. 13:29:11 HELLODBA.COM>-- Transaction 1 begin ---    
  15. 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;    
  16.     
  17. 1 row updated.    
  18.     
  19. 13:29:25 HELLODBA.COM>commit;    
  20.     
  21. Commit complete.    
  22.     
  23. 13:29:25 HELLODBA.COM>-- Transaction 1 end ---    
  24. 13:29:25 HELLODBA.COM>select object_id, lio from t_test1 t where object_id in (101,102);    
  25.     
  26. OBJECT_ID        LIO    
  27. ---------- ----------    
  28.        101          0    
  29.        102          1    
  30.     
  31. 13:29:25 HELLODBA.COM>    
  32.     
  33. Session 2:    
  34.     
  35. 13:29:11 HELLODBA.COM>-- Transaction 2 begin ---    
  36. 13:29:16 HELLODBA.COM>update t_test1 set lio=0 where object_id in (101,102);    
  37.     
  38. rows updated.    
  39.     
  40. 13:29:16 HELLODBA.COM>commit;    
  41.     
  42. Commit complete.    
  43.     
  44. 13:29:16 HELLODBA.COM>-- Transaction 2 end ---   

在這個例子中,我們并發執行了上面兩條語句,但最終得到一個和我們邏輯目標相左的結果。

事務1的SCN早于事務2的SCN,因此它用了一個快照數據(由一致性讀得到的老的數據)來更新了當前數據(由當前模式讀得到的最新的數據)。

我不能說這算不算MVCC的一個缺陷,但它最少已經造成了邏輯混亂。

 

【編輯推薦】

  1. 淺述當前模式讀與一致性讀的區別
  2. 告訴你,如何成就DBA職業生涯
  3. DBA應用技巧:如何升級InnoDB Plugin
  4. DBA必備:MySQL數據庫常用操作和技巧
  5. MySQL日志操作教程:DBA們管理的利器


 

責任編輯:艾婧 來源: HelloDBA.com
相關推薦

2011-05-04 09:43:23

當前模式讀一致性讀

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2020-11-24 09:03:41

一致性MySQLMVCC

2020-09-10 10:26:44

MySQL數據庫MVCC

2022-12-14 08:23:30

2021-06-22 10:22:08

業務IT一致性首席信息官

2016-12-19 18:41:09

哈希算法Java數據

2019-09-05 08:43:34

微服務分布式一致性數據共享

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2016-11-16 19:15:34

消息時序分布式系統

2020-05-12 10:43:22

Redis緩存數據庫

2021-06-30 21:13:49

CPUCache數據

2022-10-19 12:22:53

并發扣款一致性

2022-03-22 09:54:22

Hash算法

2024-05-28 00:50:00

RedisMySQL緩存

2021-04-24 16:58:03

數據庫工具技術

2024-05-08 16:37:17

MySQLRedis數據庫

2021-09-15 07:46:42

哈希一致性哈希算法

2021-02-04 06:30:26

Python編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 毛片大全 | 最新日韩精品 | 亚洲国产欧美在线 | 中文字幕福利视频 | 二区视频| 密乳av | 精品一区在线 | 欧美高清hd| 波多野结衣一区二区 | 奇米视频777 | 99久久婷婷国产综合精品电影 | 亚洲欧洲一区 | 亚洲一区二区三区在线免费观看 | 国产亚洲一区二区精品 | 欧美日韩精品区 | 国产女人与拘做受免费视频 | 亚洲精品一区二区三区四区高清 | 日韩欧美国产一区二区三区 | avav在线看| 久久一二三区 | 欧美一级久久 | 精品欧美一区二区三区 | 美女艹b | 国产96色在线 | 亚洲一区导航 | 色999视频| 久久精品国产一区 | 99精品国自产在线观看 | 中文字幕一区二区三区精彩视频 | 96国产精品久久久久aⅴ四区 | 一区二区免费 | 亚洲精品久久久久久久久久久 | 妞干网视频 | 九色国产| 欧美精品福利视频 | 色婷婷综合久久久中字幕精品久久 | 国产精品.xx视频.xxtv | 成人无遮挡毛片免费看 | 一级片在线视频 | 欧美一区二区视频 | 欧美狠狠操 |