極速體驗:Oracle 18c 下載和Scalable Sequence新特性
Oracle 18c 已至,目前已經可以從Oracle Edelivery 網站下載。 該網站的網址是:https://edelivery.oracle.com 。
搜尋 Oracle Database 可以看到 18 版的軟體介質,目前的介質宣告是 Exadata Only,但是應可以在非Exadata Linux 系統平臺安裝,OEL 是Oracle 推薦的最佳支援平臺 :
目前介質包含主要包含三個檔案,客戶端、軟體 和 Grid 安裝包,首發 Linux 系統支援版本(百度雲分享了一份軟體,關注公眾號回覆:18cNF 可以在目錄中找到):
關於 Oracle 18c 的新特性,我整理一個之前釋出過的文章列表,供大家參考:
此前我們就曾經注意到一個有意思的特性:可擴充套件序列 - Scalable Sequence
通過在CREATE SEQUENCE或ALTER SEQUENCE語句中指定SCALE子句,可以使序列獲得健壯的擴充套件性。
那麼這個特性是如何實現的?究竟又是為了解決什麼問題呢?
在這個主題中,Andrew 提到了在優化時候遇到的種種索引競爭情況:
我們一直在尋找一種方法,希望能夠從應用層就把競爭的可能性消除。既能解決單節點的競爭問題,又能在擴充套件中不帶來新的問題,這就需要保證快取的相關性,讓資料所在的例項恰好是會被訪問的例項。
那麼最佳的解決方案會是怎樣的呢?
跟所有RWP的解決方案一樣,我們並不推薦通過各種配置或者引數的調整來解決問題,我們會擴充套件問題的領域,希望把問題上升到應用層去解決,對於案例中的索引競爭的問題,如果我們能控制如何生成代理主鍵,我們就能把這些特徵放入到生成的主鍵中。
這樣不僅能夠保證得到較好的快取相關度,從而使RAC可擴充套件,而且可以把主鍵分散開,這樣在單例項上也不會出現競爭。
所以關於索引競爭,我們面臨兩個挑戰,
一是例項間的競爭或者說擴充套件性問題
二是單節點間的競爭
因此我們考慮生成一個智慧主鍵,智慧主鍵常常需要找到應用程式碼中的某一行,弄清楚我們要如何生成這一串位元組才能確保不會出現競爭。
首先要考慮的是可以使用例項號作為主鍵號的開頭,這樣插入資料的時候就會儲存在樹節點的一邊,也正是這些資料應該被儲存到的例項上,這樣就可以建立與插入操作相關的快取相關性。
當我們在訪問的時候能夠準確定位資料所在的例項之後,第二個要考慮的問題就是,訪問同一個例項上資料的時候不會競爭同一塊記憶體,
我們考慮,如果說智慧主鍵的中間部分如果是對程序號某種方式取餘,這樣就把對索引的維護分散到同一例項的多個記憶體塊上去,而智慧主鍵的最後一部分是sequence的本身,這樣可以保證引用和完整性,確保每一行都是唯一的。
因此最終智慧主鍵的組成是:例項ID-程序號取餘-序列號
接下來我們通過實驗來看一下,在使用智慧主鍵的情況下,發現系統的響應時間減少,其他等待事件消失,CPU利用率提高,並且只有CPU在佔用時間。跟最初系統沒有產生競爭的情況下的效能一樣。
通過自定義智慧主鍵,很好地避免了傳統的索引方案的不足,在不影響效能的情況下有效實現了業務的需求。
我們來看一下 18c 中的可擴充套件序列的定義:
通過以下語法定義 scalable sequence:
CREATE | ALTER SEQUENCE sequence_name ... SCALE [EXTEND | NOEXTEND] | NOSCALE ...
當
SCALE
語句被指定時, 一個 6 位數的數字被指定作為序列的字首,末尾是正常的序列數字,兩者聯合成為新的序列:scalable sequence number =
6 digit scalable sequence offset number
||
normal sequence number在這裡, 6 位數字字首是如何生成的呢?正是由 例項號 和 會話號 生成的:
6 digit scalable sequence offset number = 3 digit instance offset number
||
3 digit session offset number.The 3 digit instance offset number is generated as [
(instance id % 100) + 100
]. The 3 digit session offset number is generated as [session id % 1000
].
所以可以看到,這個設計和 之前 Andrew 的描述完全相同,這正是來自實踐的指導最終推動了 Oracle 資料庫產品的進步。
測試驗證一下吧:
drop sequence enmo_seq;
CREATE SEQUENCE enmo_seq INCREMENT BY 1 MAXVALUE 1000000 SCALE;
SELECT enmo_seq.nextval FROM dual;
由於有 6 位字首,也就是說序列最小要具備 7 位的長度,否則將不能使用:
而即使是 7 位,對於單一程序連線,也將僅有 9 個可用值:
ORA-64603: NEXTVAL cannot be instantiated for ENMO_SEQ. Widen the sequence by 1 digits or alter sequence with SCALE EXTEND.
現在通過這種序列方式,能夠真正將來自不同例項的資料分散開來,索引競爭大大降低,從而提升了效能,使得序列變得可擴充套件。
更多新特性,歡迎大家測試體驗,並和我們分享。
如果你錯過了我們年前準備的新春大禮包,不妨再來一次也好:
年貨一:年度經典文件選集1、《恩墨年貨-企業系統運維及案例》下載:https://pan.baidu.com/s/1mkpD2fY
2、《恩墨年貨-MySQL與開源技術》下載:https://pan.baidu.com/s/1rahxN3Y
3、《恩墨年貨-SQL與效能優化》下載:https://pan.baidu.com/s/1smLbfEP
4、《恩墨年貨-前沿技術與時代走向》下載:https://pan.baidu.com/s/1jJa8mqy
年貨二:RAC及Oracle新特性全套課程視訊及PPT10課時經典視訊,幫助你更好地學習新特性與RAC核心技術。
課程下載:https://pan.baidu.com/s/1kWoduCn 密碼: 4e3d
年貨三:經典電子書下載《Oracle DBA手記4-資料安全警示錄》回覆關鍵字’DBA04’
《Oracle DBA手記2》回覆關鍵字’DBA02’
《Oracle DBA 手記1》回覆關鍵字’DBA01’
祝大家開工大吉!加入我們,開始新一年的學習吧!
資源下載
關注公眾號:資料和雲(OraNews)回覆關鍵字獲取
‘2017DTC’,2017DTC大會PPT
‘DBALIFE’,“DBA的一天”海報
‘DBA04’,DBA手記4經典篇章電子書
‘RACV1’, RAC系列課程視訊及ppt
‘122ARCH’,Oracle 12.2體系結構圖
‘2017OOW’,Oracle OpenWorld資料
‘PRELECTION’,大講堂講師課程資料