中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

Oracle 18c可擴展序列

發(fā)布于:2021-02-20 00:00:22

0

138

0

Oracle Oracle 18c 數(shù)據(jù)庫

索引塊爭用是具有高插入活動性的非常常見的數(shù)據(jù)庫,在具有通常通過序列生成的單調遞增鍵值的表上尤其常見。

Oracle B樹索引是“右手的”索引,B樹的右葉節(jié)點包含最高的鍵,該鍵位于最低的樹級別。

當基于用戶生成的鍵(例如通過序列)插入行時,以及在列由基于序列的鍵值填充的列的情況下,索引葉節(jié)點爭用發(fā)生,最近的條目將位于B樹的最右葉塊中。

這意味著所有新行將存儲在索引的最右邊的葉塊中。隨著越來越多的會話向表中插入行,最右邊的葉子塊將滿。

Oracle將最右邊的葉子塊分為兩個葉子塊,其中一個塊包含除一行以外的所有行,而一個新塊僅包含一行。

這種類型的指數(shù)增長稱為“右手增長”指數(shù)。隨著越來越多的并發(fā)會話插入到索引的最右邊的葉塊中,該索引塊成為熱塊,并且該葉塊上的并發(fā)導致性能問題。

在Oracle RAC數(shù)據(jù)庫中,此問題被放大并成為更大的瓶頸。如果序列緩存(特定于實例)很?。J為20),則最右邊的葉子塊不僅在一個實例中而且在所有實例中都成為群集的一部分,并且該熱點塊必須是通過互連來回傳輸。

Oracle Database 18c引入了一種稱為可伸縮序列的新型序列。

現(xiàn)在在Oracle 18c中,在那些具有高并發(fā)性的數(shù)據(jù)攝取工作負載的情況下,通過生成無序的主鍵或唯一鍵值的新可伸縮序列有助于顯著減少由右手索引引起的序列和索引塊爭用,從而提供了與必須使用CREATE SEQUENCE或ALTER SEQUENCE語句的CACHE子句配置非常大的序列緩存的Oracle 19c之前的解決方案相比,吞吐量,數(shù)據(jù)負載可伸縮性和性能更高。

可伸縮序列由序列偏移號組成,默認情況下包含6位數(shù)字

的前3位數(shù)字,從實例編號衍生100并將下一個3個位數(shù)從SID衍生該會話。

因此,假設具有SID 555且實例號為1的用戶–則偏移號為101555,對于實例2中具有SID 666的另一個會話,偏移號為102666。

我們可以使用EXTEND of NOEXTEND選項創(chuàng)建可伸縮序列。

為SCALE子句指定EXTEND選項時,可伸縮序列值的長度為[X位數(shù)+ Y位數(shù)],其中X是序列偏移號,Y是MAXVALUE子句中指定的位數(shù)。

讓我們看看使用EXTEND選項創(chuàng)建可伸縮序列時的工作方式。

請注意,每個實例中的序列生成的不同(無關和無序)值。

Instance 1

SQL> create sequence system.scale_ext_seq
 2  start with 1 increment by 1
 3  maxvalue 100
 4  scale extend;

Sequence created.

SQL> select system.scale_ext_seq.nextval from dual;

  NEXTVAL
----------
101007001


SQL> select sid from v$mystat where rownum = 1;

      SID
----------
7

Instance 2

SQL> select system.scale_ext_seq.nextval from dual;

  NEXTVAL
----------
102036021

SQL> select sid from v$mystat where rownum = 1;

      SID
----------
36

當為SCALE子句指定NOEXTEND選項時,可伸縮序列中的位數(shù)不能超過MAXVALUE子句中指定的位數(shù)。

請注意,當序列中的位數(shù)超過7(MAXVALUE子句1000000中的位數(shù))時會發(fā)生什么。

SQL>create sequence system.scale_noext_seq
 start with 1 increment by 1
 maxvalue 1000000
 scale noextend;  

Sequence created.

INSTANCE 1

SQL> select system.scale_noext_seq.nextval from dual;

  NEXTVAL
----------
  1010071

SQL> /

  NEXTVAL
----------
  1010072

SQL> /

  NEXTVAL
----------
  1010073

...
...

  NEXTVAL
----------
  1010078

SQL> /

  NEXTVAL
----------
  1010079

SQL> /
select system.scale_noext_seq.nextval from dual
*
ERROR at line 1:
ORA-64603: NEXTVAL cannot be instantiated for SCALE_NOEXT_SEQ. Widen the
sequence by 1 digits or alter sequence with SCALE EXTEND.


SQL> alter sequence system.scale_noext_seq maxvalue 10000000;

Sequence altered.

SQL> select system.scale_noext_seq.nextval from dual;

  NEXTVAL
----------
 10100741



INSTANCE 2


SQL> select system.scale_noext_seq.nextval from dual;

  NEXTVAL
----------
 10203661