1. 程式人生 > 其它 >Oracle Sequence總結

Oracle Sequence總結

參考MOS:
RAC and Sequences (文件 ID 853652.1)
Caching Oracle Sequences (文件 ID 62002.1)

1、sequence cache 跳號的幾種情況

1.1、sequence cache儲存在shared_pool的library cache中,當cache的sequence長時間不用,
library cache會根據lru最近最久未使用演算法將sequence cache清理出去,這叫做sequence cache aging out,
這會導致sequence的跳號現象。


1.2、當sequence未使用keep cache時,通過flush shared_pool的方式,同樣會達到將sequence cache
清理出library cache的作用,導致sequence出現跳號的現象。

1.3、特定的ora-600錯誤也會導致sequence cache失效出現跳號情況。

1.4、例項的重啟會導致sequence cache失效出現跳號情況。

1.5、事務用到了sequence,並且大量回滾的情況下,也會出現gap的情況。

2、sequence 的cache、nocache、order、noorder屬性總結

2.1、cache+noorder
這種屬性設定是RAC最佳效能配置,不指定任何屬性的情況下,RAC會預設使用這種配置,cache預設20;
對sequence沒有強制的order要求,並且頻繁使用sequence的情況下,建議cache值調整為1000~2000;
若不頻繁使用sequence,但希望儘量不出現sequence跳號的情況,可以保持cache值為20,或者將sequence
放入keep cache中,讓sequence常駐記憶體,不會被flush、aving out出去。


2.2、cache+order
若應用有要求sequence需要強制order,則該sequence必須這是為cache屬性,否則效能會很差,order的情況下,
sequence也會由於flush、instance shutdown等情況出現gap跳號,同樣可以採用keep的方式讓sequence常駐記憶體。

2.3、nocache+noorder
效能僅優於 nocache+order,不推薦使用

2.4、nocache+order
效能最差的sequence屬性組合,不會出現sequence的gap,強制order,不推薦使用。


預設情況下dbms_shared_pool包是不在系統中的,需要執行$ORACLE_HOME/rdbms/admin/dbmspool.sql進行建立

建立dbms_shared_pool,建立後,只有sys能夠呼叫該包,若需要其他使用者呼叫,則需要單獨賦權
@?/rdbms/admin/dbmspool.sql

賦權:grant execute on dbms_shared_pool to cismon;


keep sequence 讓指定sequence常駐記憶體:A為sequence名稱,Q為關鍵詞,代表sequence
exec dbms_shared_pool.keep('A','Q');

解除指定sequence的常駐記憶體:
exec dbms_shared_pool.unkeep('A','Q');

本文來自部落格園,作者:Eddie小陳,轉載請註明原文連結:https://www.cnblogs.com/orachen/p/15878852.html