62
,併發與多版本:
覺得這是資料庫永恆的主題。乙個資料的高低,都是體現在這裡。至少對於開發者來說就是這樣。
oracle
在併發上面,與其他資料庫最大的區別是採用多版本的概念而不是鎖來達到資料的一致性。這一點在看了之後。覺得真的是乙個很天才的發明。
63.事務隔離級別。
常規的來說。事務隔離級別有read uncommitted
,read committed
,repeatable read
和serializable
。書中的關鍵點,我總結為以下幾點。
第一,read committed
是最低也是最常用的級別。因為read uncommitted
的存在是為了無阻塞讀。但是oracle
的多版本的理念。完全可以在read committed
這個級別達成無阻塞讀的效果。
第二。取得資料版本的時間,即發生的讀請求的時間。能夠說明的就是serializable
的讀寫。在書中p239
頁的例子正好說明了這個問題
64,在serializable
時,可能產生熱表的i/o
異常高。
這種問題很難複製。因為這種i/o
異常,完全是由於oracle
實現serializable
的方式導致。並且只有在併發性比較高的情況下才會發生。
比方說a
事務是serializable
的。那麼它在執行。在a
執行之前,關於a
要涉及的表b
有一千次修改。在資料庫中的版本會「比較新」。因為一千次修改的結果是,oracle
需要不斷的更新記憶體中的表b
。但是a
需要比較舊的版本。那麼oracle
不得不不斷的回到磁碟上對資料進行讀寫。
65寫一致性。
大體上來說,和讀一致性完全一樣。不過寫一致性會有個「重啟動」的問題
「重啟動」的原因在於多版本的。因為修改之前要做的是查詢。比方說事務a
和b更新同一樣,其值為1.a
先開始。獲得值1
,但是未提交。此時b
也修改此行。獲得值1.
。因為a
沒有提交,所以來說b
獲得還是1
。如果a
提交,b
獲得了執行的權利。但是資料已經變成了2
。那麼資料庫就會再次執行一次查詢。獲得資料2.
這就是重啟動。
Oracle學習筆記(八) 約束
約束的作用 定義規則 確保資料完整性 非空約束 在建立表的時候設定 create table table name column name datatype not null,修改表的時候設定 alter table table name modify column name datatype no...
oracle學習筆記八(索引)
索引 是用於加速資料訪問的資料物件,合理的使用索引可以大大降低i o次數,從而 提高資料訪問效能,索引有很多種,我們主要介紹常用的幾種 單列索引 單列索引是基於單個列所建立的索引 如create index 索引名 on 表名 列名 復合索引 復合索引是基於兩列或是多列的索引,在同一張表上可以有多個...
oracle筆記(八)數字函式
數字函式 round 四捨五入 round 45.926,2 45.93 trunc 截斷 trunc 45.926,2 45.92 mod 求餘 mod 1600,300 100 abs 絕對值 ceil 返回大於或等於value的最小整數 floor 返回小於或等於value的最大整數 sqrt...