1. 程式人生 > 其它 >極速體驗:Oracle 18c 下載和Scalable Sequence新特性

極速體驗: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 的新特性,我整理一個之前釋出過的文章列表,供大家參考:

Oracle Database 18c 的10大新特性一覽 技術前沿:Oracle 18c 最新特性概覽 開工大吉:Oracle 18c已經發布及新特性介紹

此前我們就曾經注意到一個有意思的特性:可擴充套件序列 - Scalable Sequence

通過在CREATE SEQUENCE或ALTER SEQUENCE語句中指定SCALE子句,可以使序列獲得健壯的擴充套件性。

那麼這個特性是如何實現的?究竟又是為了解決什麼問題呢?

我們回顧一下,Oracle RWP 團隊的領袖 Andrew Holdsworth 的一個精彩分享:Real World Performance 經典效能優化案例-索引競爭

在這個主題中,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新特性全套課程視訊及PPT

10課時經典視訊,幫助你更好地學習新特性與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’,大講堂講師課程資料